Почему мой слой не анимируется вокруг оси Z? - PullRequest
0 голосов
/ 02 июля 2010

У меня есть изображение, которое я помещаю в CALayer, затем добавляю этот слой в качестве подслоя основного вида.Когда я пытаюсь анимировать его вокруг оси Z, я вижу только статичное изображение.

Почему мой слой не анимируется?Соответствующий код выглядит следующим образом:

- (void)viewDidLoad {

    UIImage *myImage = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"about" ofType:@"png"]];
    earthLayer = [CALayer layer];
    [earthLayer setContents:(id)[myImage CGImage]];
    [earthLayer setBounds:CGRectMake(240,360, 40, 200)];
    [earthLayer setPosition:CGPointMake(280, 280)];
    [earthLayer setName:@"earth"];



    [earthLayer addAnimation:[self animationForSpinning] forKey:@"Rahul"];//here animatin is being added to the layer.. 

    [[self.view layer] addSublayer:earthLayer];

    //[self spinLayer:earthLayer];


}

//the animation method which returns a CAAnimation.

- (CAAnimation*)animationForSpinning {

    // Create a transform to rotate in the z-axis
    float radians = DegreeToRadian( 360 );
    CATransform3D transform;
    transform = CATransform3DMakeRotation(radians, 0, 1.0,0, 1.0);

    // Create a basic animation to animate the layer's transform
    CABasicAnimation* animation;
    animation = [CABasicAnimation animationWithKeyPath:@"transform"];

    // Now assign the transform as the animation's value. While
    // animating, CABasicAnimation will vary the transform
    // attribute of its target, which for this transform will spin
    // the target like a wheel on its z-axis. 
    animation.toValue = [NSValue valueWithCATransform3D:transform];

    animation.duration = 2;  // two seconds
    animation.cumulative = YES;
    animation.repeatCount = 10000;//  "forever"
    return animation;
}

Ответы [ 2 ]

1 голос
/ 02 июля 2010

Ваша проблема заключается в том, что вы пытаетесь использовать 360-градусное преобразование для анимации вашего слоя.Что касается базовой анимации, слой, преобразованный на 360 градусов, в точности совпадает с начальным слоем, поэтому анимация не выполняется.

То, что вы хотите сделать в качестве анимации вокруг клавиши transform.rotation.z, как описано в этот ответ .Это вспомогательный ключевой путь, который обеспечивает Core Animation, и поскольку ваши начальные и конечные значения (углы поворота) различаются, Core Animation не выполняет ту же оптимизацию, которую вы видите с преобразованиями.

0 голосов
/ 02 июля 2010

Вам нужно применить перспективное преобразование к своему слою перед его анимацией, иначе вращение, которое вы делаете, будет выглядеть неправильно.

CATransform3D transform = CATransform3DIdentity;transform.m34 = 1.0 / -2000;

установите для него преобразование слоя, а затем анимируйте его, как вы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...