Penso che il concetto che ti manca sia che il frame di una vista (e il suo centro) siano entrambi in relazione alla sua superview. In base al tuo screenshot, suppongo che i tuoi campi di testo e i pulsanti siano tutti in una vista che agisce da contenitore. Quindi il centro del tuo pulsante, il centro &, è in relazione a quella vista del contenitore e non alla vista del controller della vista nel suo insieme. Assegnate lo stesso fotogramma & al centro dell'indicatore di attività, ma in seguito aggiungete l'indicatore come vista secondaria della vista principale e non della vista del contenitore. Quindi ora hai due viste (il pulsante e l'indicatore) con lo stesso fotogramma, ma quella cornice è in relazione a due diverse interviste.
Il cambiamento più semplice sarebbe semplicemente aggiungere l'indicatore alla vista del contenitore che si sta utilizzando. Ma suggerirei di aggiungere l'indicatore come sottoview del pulsante, quindi basta fare un po 'di matematica per modificare la sua posizione.
UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
CGFloat halfButtonHeight = btnLogin.bounds.size.height/2;
CGFloat buttonWidth = btnLogin.bounds.size.width;
indicator.center = CGPointMake(buttonWidth - halfButtonHeight , halfButtonHeight);
[btnLogin addSubview:indicator];
[indicator startAnimating];
Come nota a margine: l'impostazione del centro di una vista subito dopo la cornice della vista è ridondante. Inoltre, l'ultima vista aggiunta come sottoview è automaticamente la vista secondaria anteriore.
Chiunque? Davvero non afferrando il posizionamento in iOS. –