2

J'ai écrit ce CAKEyFrameAnimaton pour faire pivoter un CALayer sur son axe X. Mais il ne tourne pas. Qu'est-ce que je fais mal ici?iOS CAKeyFrameAnimation Rotation

CAKeyframeAnimation *topFoldAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform.rotation.x"]; 
topFoldAnimation.duration    = 15; 
topFoldAnimation.repeatCount   = 1; 
topFoldAnimation.removedOnCompletion = NO; 
topFoldAnimation.autoreverses   = NO; 
topFoldAnimation.fillMode    = kCAFillModeForwards; 

CATransform3D tTrans     = CATransform3DIdentity; 
tTrans.m34       = -1/900; 

topFoldAnimation.values    = [NSArray arrayWithObjects: 
             [NSValue valueWithCATransform3D:CATransform3DRotate(tTrans,DEGREES_TO_RADIANS(0),1,0,0)], 
             [NSValue valueWithCATransform3D:CATransform3DRotate(tTrans,DEGREES_TO_RADIANS(-30),1,0,0)], 
             [NSValue valueWithCATransform3D:CATransform3DRotate(tTrans,DEGREES_TO_RADIANS(-60),1,0,0)], 
             [NSValue valueWithCATransform3D:CATransform3DRotate(tTrans,DEGREES_TO_RADIANS(-90),1,0,0)], 
              nil]; 
topFoldAnimation.keyTimes    = [NSArray arrayWithObjects: 
              [NSNumber numberWithFloat:0.00], 
              [NSNumber numberWithFloat:0.25], 
              [NSNumber numberWithFloat:0.50], 
              [NSNumber numberWithFloat:1.00], 
              nil]; 
topFoldAnimation.timingFunctions  = [NSArray arrayWithObjects: 
             [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear], 
             [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear], 
             [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear], 
             [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear], 
              nil]; 
[[backgroundAnimationLayer.sublayers objectAtIndex:1] addAnimation:topFoldAnimation forKey:@"transform.rotation.x"]; 

Toute aide est appréciée. Merci ...

Répondre

1

Votre animation keyPath est erronée, elle devrait être juste transform et non transform.rotation.x.

En outre, vous finirez avec 0 dans tTrans.m34 parce que vous utilisez la division entière. Il devrait probablement être -1.0/900.

+0

oui J'attribue m34 pour obtenir une perspective 2.5D. et pourquoi subLayer? Si je l'applique à la couche, toutes les sous-couches devraient avoir cette transformation, n'est-ce pas? –

+0

À droite, j'ai supposé en quelque sorte que 'm34' n'avait d'effet que pour subLayerTransform parce que je l'ai toujours utilisé de cette façon, mais cela ne semble pas être le cas. Pourtant, vous attribuez effectivement 0 ici qui n'aura certainement pas l'effet désiré. – omz

+0

cool. permettez-moi de changer cela voir ... –