/ / La rotation de CATransform3D fait disparaître la moitié de l'image - iphone, quartz-graphics, transform, calayer, catransform3d

La rotation de CATransform3D entraîne la disparition de la moitié de l'image - iphone, quartz-graphics, transform, calayer, catransform3d

J'utilise le code suivant pour faire pivoter une image, mais la moitié de l'image (en bas de l'axe y) qui a été pivotée "hors" de la page disparaît. Comment résoudre ce problème? heading est en radians.

    CALayer *layer = myUIImageView.layer;
CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;
rotationAndPerspectiveTransform.m34 = 1.0 / 500;
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, heading, 0.0f, 1.0f, 0.0f);
layer.transform = rotationAndPerspectiveTransform;

Réponses:

32 pour la réponse № 1

La solution à cela était de zPosition propriété de toutes mes couches de manière appropriée. Merci à @Brad Larson, qui a suggéré cette solution dans un commentaire ici. Il semble que lorsque vous commencez à utiliser CATransform3D, la hiérarchie de vues zindex normale établie par AddSubview est rejetée par la fenêtre.


5 pour la réponse № 2
  layer.anchorPoint = CGPointMake(0.0, 0.0);

0 pour la réponse № 3

Réglage du anchorPoint à {0.0, 0.0} fonctionne aussi (comme Liam l'a déjà souligné).

Voici l'extrait de code complet pour changer le anchorPoint sans changer la position du calque à l'écran:

     layer.anchorPoint = CGPointMake( 0.0, 0.0 );

CGPoint position = layer.position;
CGSize size = layer.bounds.size;

CGFloat posX = position.x - size.width / 2.0;
CGFloat posY = position.y - size.height / 2.0;

layer.position = CGPointMake( posX, posY );