CABasicAnimation делегат для animationDidStop? - PullRequest
15 голосов
/ 08 апреля 2010

Я следую примеру в нижней части страницы, чтобы вызвать функцию animationDidStop.

http://www.informit.com/articles/article.aspx?p=1168314&seqNum=2

Автор говорит:

У меня есть объект, специально разработанный для делегата анимации, и все, что он делает, - это удерживает ссылку на целевой объект, принимает animationDidStop: message и затем освобождает себя.

Это говорит о том, что вы не должны делать:

[animation setDelegate:self];

Я довольно новичок в разработке приложений, может кто-нибудь обрисовать, как я могу это сделать? Или пришлите мне ссылку, где это объясняется.

Ответы [ 3 ]

38 голосов
/ 28 июля 2010

Реализация:

- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag

на вашем объекте делегата. Вы также можете реализовать:

- (void)animationDidStart:(CAAnimation *)theAnimation

для приема вызова при запуске анимации.

Для получения дополнительной информации см. Раздел «Делегаты»: http://developer.apple.com/iphone/library/documentation/GraphicsImaging/Reference/CAAnimation_class/Introduction/Introduction.html

4 голосов
/ 02 июля 2013

Иногда требуется установить фактическое значение вашего слоя в значение toValue после завершения анимации.Когда это более сложная анимация, такая как анимация цветов CAGradientLayer, это необходимо.

- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag
{
  self.gradientLayer.colors = (NSArray *)((CABasicAnimation*)theAnimation).toValue;
}
0 голосов
/ 08 августа 2012

Просто установка

[UIView setAnimationDelegate:self];

не вызовет ни один из методов делегата Animation, когда анимация начинается или заканчивается.

Эту проблему можно решить одним из следующих обходных путей.

1) В разделе вашей реализации добавьте

@implementation MyViewWithAnimations <UIApplicationDelegate>


2) В вашей анимации begin-commit-block добавьте

[UIView setAnimationWillStartSelector:@selector(animationDidStart:)];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:)];


3) ЧтоApple предлагает вместо этого использовать методы блочной анимации.

http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIView_Class/UIView/UIView.html

...