Mon UIViewController est « couché » au sujet de sa propriété centre
-
21-08-2019 - |
Question
Je demande mon ViewController pour sa propriété view.center et dessiner une nouvelle UIView qui se centre autour de ce « centre » ... Je reçois (160, 250) en réponse. mais quand la nouvelle UIView dessine est ci-dessous centre ... Je me demande donc qui me donne cette information et ce qu'elle concerne? Ceci est clairement où le centre de la vue est par rapport à la fenêtre si vous prenez en compte la hauteur de 20px de la barre d'état. qui pousserait le centre de la vue vers le bas 10px. mais quand le dessin myView il semble tirer par rapport à la ViewController.view et non la fenêtre il apparaît 20px en dessous du centre ...
Je me attends ViewController pour me donner son centre (160, 230) pour que je puisse dessiner dans son centre ... dois-je compte manuellement la barre d'état et soustraire 20 de la hauteur à chaque fois? ou est-il une traduction de l'espace vue je suis avec vue? 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
La solution
Il est pas « mentir » en fait, il est de vous donner une réponse dans un système de coordonnées différent.
Lorsque vous obtenez ou définissez le centre de vue, il est calculé par rapport à son de système de coordonnées parent . parent de la fenêtre est self.view
de l'application, d'où son centre est (160, 250) comme vous deviné. Mais le parent de est myView
self.myView
, qui a son propre système de coordonnées local. Dans ce cas, ce système de coordonnées est de 20 pixels inférieur à celui de la fenêtre.
Qu'est-ce que vous voulez est de trouver le centre de son bounds
propre système de coordonnées. Il y a deux façons dont vous pouvez le faire.
1) Vous pouvez le calculer en fonction de la propriété CGRect
, qui est un qui spécifie les UIView
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 la méthode est de convertir convertPoint:fromView:
la <=> coordonnée de système de coordonnées de la fenêtre dans celle de <=>:
// Pass nil as the source view to convert from the window's coordinate system myView.center = [self.view convertPoint:self.view.center fromView:nil];
Autres conseils
Peut-être ajouter à la sous-vue avant de demander à son centre et la 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;
Je crois que je connais la réponse. Vous est correct centre de la vue!
Vous avez oublié d'ajouter la barre d'état de l'iPhone est 20px du haut de l'écran et donc inclus dans votre centre de la vue. Bingo.