2013-05-26 20 views
6

Sto cercando di aggiungere una piccola icona al centro della schermata dell'app iPhone. Di seguito è riportato il codice che penso dovrebbe funzionare, ma non è centrarlo. La posizione relativa alla larghezza è soddisfacente, ma l'altezza è lontana, circa 100 pixel disattivati?Aggiunta centro subview dello schermo

UIImage *pinMarker = [UIImage imageNamed:@"red_pen_marker.png"]; 
UIImageView *pinMarkerView = [[UIImageView alloc] initWithImage:pinMarker]; 
pinMarkerView.frame = CGRectMake(self.view.frame.size.width/2 - 9, self.view.frame.size.height/2 - 36, 18, 36); 


[self.view addSubview:pinMarkerView]; 

Qualche suggerimento? Magari posizionandolo secondo l'intera dimensione della finestra dell'app invece di questa schermata?

+2

La mia ipotesi è che si sta utilizzando un UINavigationController (possibilmente con una barra degli strumenti e/o pronta mostrando) e che si sta aggiungendo alla vista di un controller della vista, in contrasto con la la vista del controller di navigazione. –

risposta

13

Deve essere self.view.frame.size.height/2 - 18. Un modo più semplice è quello di appena impostato in questo modo:

pinMarkerView.center = self.view.center; 

ma senza sapere ciò che la vista padre è che è impossibile dire come portare l'ImageView al centro dello schermo.

+0

Beh, non è impossibile. Non ricordo tutto il codice a memoria, ma puoi ottenere il centro della finestra e poi calcolare le coordinate chiedendo a una delle viste di calcolarla per te. –

4

penso NSLayoutConstraint dovrebbe risolvere il tuo problema

UIView *superview = self.view; 

UIImage *pinMarker = [UIImage imageNamed:@"red_pen_marker.png"]; 
UIImageView *pinMarkerView = [[UIImageView alloc] initWithImage:pinMarker]; 
pinMarkerView.frame = CGRectMake(self.view.frame.size.width/2 - 9, self.view.frame.size.height/2 - 36, 18, 36); 

[pinMarkerView setTranslatesAutoresizingMaskIntoConstraints:NO]; 
[self.view addSubview:pinMarkerView]; 

NSLayoutConstraint *myConstraint =[NSLayoutConstraint 
            constraintWithItem:pinMarkerView 
            attribute:NSLayoutAttributeCenterX 
            relatedBy:NSLayoutRelationEqual 
            toItem:superview 
            attribute:NSLayoutAttributeCenterX 
            multiplier:1.0 
            constant:0]; 
NSLayoutConstraint *myConstraint2 =[NSLayoutConstraint 
            constraintWithItem:pinMarkerView 
            attribute:NSLayoutAttributeCenterY 
            relatedBy:NSLayoutRelationEqual 
            toItem:superview 
            attribute:NSLayoutAttributeCenterY 
            multiplier:1.0 
            constant:0]; 

[superview addConstraint:myConstraint]; 
[superview addConstraint:myConstraint2]; 
3

Ecco una soluzione

Invece di self.view.frame.size.width

Usa :: [ UIScreen mainScreen] .bounds.size.width o height

Quindi il codice è

UIImage *pinMarker = [UIImage imageNamed:@"red_pen_marker.png"]; 
UIImageView *pinMarkerView = [[UIImageView alloc] initWithImage:pinMarker]; 
pinMarkerView.frame = CGRectMake([UIScreen mainScreen].bounds.size.width/2, [UIScreen mainScreen].bounds.size.height/2 , 18, 36); 
[self.view addSubview:pinMarkerView]; 
Problemi correlati