2013-08-06 1 views
0

J'utilise CALayer pour un moteur de livre interactif et je veux faire pivoter CALayer autour de son centre mais quand j'applique une transformation de rotation (en utilisant un angle basé sur l'entrée utilisateur) à CALayer, ça devient fou s'étire et se déplace de manière très étrange et disparaît. Ce que je fais estComportement étrange de la rotation de rotation pour CALayer

[CATransaction begin]; 
[CATransaction setValue: (id) kCFBooleanTrue forKey: kCATransactionDisableActions]; 
... 
layer.transform = CATransform3DMakeRotation(angle, 0, 0, 1); 
... 
[CATransaction commit]; 

Fait intéressant, lorsque mon angle est M_PI ou M_PI/2, ou il est tout à transformer l'échelle est ok, mais quand sa rotation et toute autre couche d'angles devient fou.

Est-ce que quelqu'un sait ce qui se passe et comment le réparer?

+0

L'origine d'un CALayer est-elle au centre? Sinon, vous devrez d'abord transformer l'origine au centre, faire la rotation, puis la transformer. – user1118321

+0

essayez ceci 'layer.anchorPoint = CGPointMake (0.5, 0.5);' – Bala

+0

Est-ce que votre calque appartient à une vue? Si oui, la vue utilise-t-elle la mise en page automatique? Le système de mise en page automatique va essayer de définir le cadre de la vue, ce qui conduit généralement à des résultats étranges si votre vue est transformée. –

Répondre

2

J'ai trouvé la raison moi-même: car en parallèle j'ai déplacé la couche en utilisant la propriété .frame au lieu de la propriété .position: la propriété frame elle-même est calculée en fonction de la transformation, ce qui produit un comportement "fou".

Questions connexes