Comme SMACL souligne, la meilleure façon de le faire est de déplacez votre origine en bas à gauche de l'écran en utilisant (screenheight - viewheight - y) au lieu de y dans les origines de vos vues. Toutefois, vous pouvez inverser le système de coordonnées des calques de votre vue principale à l'aide d'un CATransform3D. Je fais cela pour que je puisse partager le même code de disposition Core Animation CALayer entre mon application iPhone et un client Mac (l'iPhone inverse le système de coordonnées Quartz normal pour que CALayers corresponde à celui des UIViews). Tout ce que vous devez faire pour activer est de placer la ligne
self.layer.sublayerTransform = CATransform3DMakeScale(1.0f, -1.0f, 1.0f);
dans votre code d'initialisation pour votre UIView couche d'hébergement. Rappelez-vous que cela va retourner votre CALayers, de sorte que tout le rendu du texte UIKit dans ces couches peut également être basculée en utilisant un code similaire à ce qui suit:
CGContextSaveGState(context);
CGContextTranslateCTM(context, 0.0f, self.frame.size.height);
CGContextScaleCTM(context, 1.0f, -1.0f);
UIFont *theFont = [UIFont fontWithName:@"Helvetica" size:fontSize];
[text drawAtPoint:CGPointZero withFont:theFont];
CGContextRestoreGState(context);
Vous pouvez faire une sorte similaire d'inversion à l'aide d'un CGAffineTransform, mais vous devra également appliquer une traduction pour faire ce travail:
CGAffineTransform flipTransform = CGAffineTransformMakeTranslation(0.0f, self.frame.size.height);
flipTransform = CGAffineTransformScale(flipTransform, 1.0f, -1.0f);
Vous pourriez être en mesure d'utiliser la transformation affine pour convertir votre origine coordonnées à l'aide CGPointApplyAffineTransform().