Est-il possible de convertir le système de coordonnées après un changement d'orientation paysage?
-
23-08-2019 - |
Question
Dans une application iPhone OS fonction de la vue, je change l'orientation de l'orientation portrait initiale à une orientation paysage (UIInterfaceOrientationLandscapeRight). Mais maintenant x, y origine (0,0) est dans la en bas à gauche coin (au lieu de la partie supérieure gauche habituelle) et chaque fois que je veux faire quelque chose qui implique les coordonnées, je dois RE- calculer pour compenser le nouveau système de coordonnées. J'ai aussi remarqué que mon point de vue dans le nouveau système de coordonnées ne se comportent pas normalement parfois. Alors, est-il un moyen de convertir une fois que le système de coordonnées, juste après avoir changer l'orientation, afin que je puisse continuer à penser de mes coordonnées comme ayant une origine dans le supérieur gauche coin?
La solution
Si vous faites l'approche recommandée d'appliquer une transformation à votre point de vue principal afin de le faire pivoter:
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
if (orientation == UIInterfaceOrientationLandscapeRight)
{
CGAffineTransform transform = primaryView.transform;
// Use the status bar frame to determine the center point of the window's content area.
CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame];
CGRect bounds = CGRectMake(0, 0, statusBarFrame.size.height, statusBarFrame.origin.x);
CGPoint center = CGPointMake(60.0, bounds.size.height / 2.0);
// Set the center point of the view to the center point of the window's content area.
primaryView.center = center;
// Rotate the view 90 degrees around its new center point.
transform = CGAffineTransformRotate(transform, (M_PI / 2.0));
primaryView.transform = transform;
}
puis tout subviews vous ajoutez à ce point de vue principal devraient utiliser le système de coordonnées standard. La transformation qui est appliqué à la vue principale se charge de faire tourner les coordonnées des sous-vues, ainsi. Cela fonctionne bien pour moi dans ma demande.