Чего мне не хватает в этом неявном анимационном коде для CALayer? - PullRequest
0 голосов
/ 14 октября 2010

Я пытаюсь получить следующий код из книги для работы. Он анимирует слой UIImageView, называемый Chicken:

[CATransaction setValue:kCAMediaTimingFunctionEaseInEaseOut forKey:kCATransactionAnimationTimingFunction];
[CATransaction setValue:[NSNumber numberWithFloat:1.0] forKey:kCATransactionAnimationDuration];
theChicken.position = CGPointMake(225, 144);

Проблема в том, что этот код не анимируется. Он просто перемещает цыпленка в 225 144 без анимации (он просто телепортируется туда, как по волшебству). Может кто-нибудь помочь мне исправить код, чтобы он работал?

Заранее спасибо,

Martin

1 Ответ

1 голос
/ 14 октября 2010

Что произойдет, если вы обернетесь в:

[CATransaction begin];

[CATransaction setValue:kCAMediaTimingFunctionEaseInEaseOut forKey:kCATransactionAnimationTimingFunction];
[CATransaction setAnimationDuration:1.0];
theChicken.position = CGPointMake(225, 144);

[CATransaction commit];

Если это все еще не работает, это может быть связано с делегатом слоя. Этот слой подслой? Я думаю, что делегат установлен на ноль на корневых слоях, что будет иметь этот эффект.

Вместо этого вы можете использовать анимацию UIView:

[UIView beginAnimations:@"anim1" context:nil];
[UIView setAnimationDuration:1.0];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];

theChicken.position = CGPointMake(225, 144);

[UIView commitAnimations];
...