3

Je demande à mon ViewController pour sa propriété view.center et dessine un nouvel UIView qui se centre autour de ce "centre" ... Je reçois (160, 250) comme une réponse. mais quand le nouveau UIView dessine c'est ci-dessous centre ... Donc je me demande qui me donne cette information et à quoi elle se rapporte? C'est clairement où le centre de la vue est en relation avec la FENETRE si vous tenez compte de la hauteur de 20px de la barre d'état. ce qui ferait baisser le centre de la vue de 10px. mais quand dessiner myView il semble dessiner par rapport à ViewController.view et pas la fenêtre donc il apparaît 20px au-dessous du centre ...Mon UIViewController est "mentir" sur sa propriété centre

Je m'attendrais à ce que le ViewController me donne son centre (160, 230) ainsi je pourrais dessine en son centre ... dois-je comptabiliser manuellement la barre d'état et soustraire 20 de la hauteur à chaque fois? ou y a-t-il une vue de l'espace de vue que je néglige? De ViewController.m:

- (void)setUpMyView { 
// Create my view 

MyView *aView = [[MyView alloc] init]; 
self.myView = aView; 
[aView release]; 
myView.center = self.view.center; 
NSLog(@"CenterX: %f, Y: %f", self.view.center.x, self.view.center.y); 
CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI_2); 
myView.transform = transform; 

[self.view addSubview:myView]; 

}

console: CenterX: 160,000000, Y: 250,000000

Répondre

10

Ce n'est pas "menteur" en fait, c'est de vous donner une réponse dans un système de coordonnées différent.

Lorsque vous obtenez ou définissez est calculé par rapport à son de coordonnées parent centre de, vue système. Le parent de self.view est la fenêtre de l'application, donc son centre est (160, 250) comme vous l'avez supposé. Mais myView parent est self.view, qui a son propre système de coordonnées local. Dans ce cas, ce système de coordonnées est inférieur de 20 pixels à celui de la fenêtre.

Ce que vous voulez est de trouver le centre de self.myView dans son propre système de coordonnées. Il y a deux façons de le faire.

1) Vous pouvez le calculer en fonction de la propriété bounds, qui est un CGRect qui précise les limites d'une vue dans son propre système de coordonnées:

 
myView.center = CGPointMake(self.view.bounds.size.width/2, 
          self.view.bounds.size.height/2); 

2) Ou vous pouvez utiliser UIView « s convertPoint:fromView: méthode pour convertir les coordonnées de coordonner le système dans celui de self.view de la fenêtre:

 
// Pass nil as the source view to convert from the window's coordinate system 
myView.center = [self.view convertPoint:self.view.center fromView:nil]; 
+0

Une autre possibilité est que self.view.superview est nul. Je l'ai rencontré moi-même avec un UITableViewController. –

0

Peut-être ajouter à la sous-vue avant de demander à son centre et sa taille.

MyView *aView = [[MyView alloc] init]; 
self.myView = aView; 
[aView release]; 
[self.view addSubview:myView]; // add it to the subview first before asking center. 
myView.center = self.view.center; 
NSLog(@"CenterX: %f, Y: %f", self.view.center.x, self.view.center.y); 
CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI_2); 
myView.transform = transform; 
0

Je pense que je connais la réponse. Vous voyez le centre est correct!

Vous avez oublié d'ajouter la barre d'état de l'iPhone est 20px vers le bas à partir du haut de l'écran et donc inclus dans votre centre de vue. Bingo.