iOS CAKeyFrameAnimation Повернуть - PullRequest
2 голосов
/ 26 августа 2011

Я написал это CAKEyFrameAnimaton, чтобы повернуть CALayer вокруг своей оси X. Но это не вращение. Что я тут не так делаю?

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"];

Любая помощь приветствуется. Спасибо ...

1 Ответ

1 голос
/ 29 августа 2011

Ваша анимация keyPath неверна, она должна быть просто transform, а не transform.rotation.x.

Кроме того, вы получите 0 в tTrans.m34, потому что вы используете целочисленное деление. Вероятно, это должно быть -1.0/900.

...