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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top