Manera correcta de cargar un Nib para una subclase UIView

Soy consciente de que esta pregunta se ha hecho antes, pero las respuestas son contradictorias y estoy confundido, así que por favor no me llames.

Quiero tener un reutilizableUIView subclase a lo largo de mi aplicación. Quiero describir la interfaz usando un archivo de plumilla.

Ahora digamos que es una vista de indicador de carga con un indicador de actividad en ella. En algún evento me gustaría crear una instancia de esta vista y animarla en la vista de un controlador de vista. Podría describir la interfaz de la vista sin problemas mediante programación, creando los elementos mediante programación y configurando su marco dentro de un método de inicio, etc.

¿Cómo puedo hacer esto usando una punta? Mantener el tamaño dado en el constructor de interfaces sin tener que establecer un marco.

Me las arreglé para hacerlo de esta manera, pero estoy seguro de que está mal (solo es una vista con un selector):

 - (id)initWithDataSource:(NSDictionary *)dataSource {
        self = [super init];
        if (self){
            self = [[[NSBundle mainBundle] loadNibNamed:[NSString stringWithFormat:@"%@", [self class]] owner:self options:nil] objectAtIndex:0];
            self.pickerViewData = dataSource;
            [self configurePickerView];
        }
        return self;
    }

Pero me estoy sobrescribiendo, y cuando lo instalo:

FSASelectView *selectView = [[FSASelectView alloc] initWithDataSource:selectViewDictionary];
    selectView.delegate = self;

    selectView.frame = CGRectMake(0, self.view.bottom + 50, [FSASelectView width], [FSASelectView height]);

Tengo que establecer manualmente el marco en lugar de que se retire de IB.

EDITAR: Quiero crear esta vista personalizada en un controlador de vista y tener acceso para controlar los elementos de la vista. No quiero un nuevo controlador de vista.

Gracias

EDIT: No sé si esta es la mejor práctica, estoy seguro de que no lo es, pero así es como lo hice:

FSASelectView *selectView = [[[NSBundle mainBundle] loadNibNamed:[NSString stringWithFormat:@"%@",[FSASelectView class]] owner:self options:nil] objectAtIndex:0];
    selectView.delegate = self;
    [selectView configurePickerViewWithData:ds];
    selectView.frame = CGRectMake(0, self.view.bottom + 50, selectView.width, selectView.height);
    selectView.alpha = 0.9;
    [self.view addSubview:selectView];
    [UIView animateWithDuration: 0.25 delay: 0 options:UIViewAnimationOptionAllowUserInteraction |UIViewAnimationOptionCurveEaseInOut animations:^{
                            selectView.frame = CGRectMake(0, self.view.bottom - selectView.height, selectView.width, selectView.height);
                            selectView.alpha = 1;
                        } completion:^(BOOL finished) {
                        }];

La práctica correcta todavía quería

¿Se debería haber hecho esto usando un controlador de vista e inic con un nombre de punta? ¿Debería haber establecido la punta en algún método de inicialización UIView en el código? ¿O es lo que he hecho bien?

Respuestas a la pregunta(6)

Su respuesta a la pregunta