Почему animationDidStart: не работает? - PullRequest
1 голос
/ 28 июля 2010

Я получаю уведомление, когда анимация запускается и останавливается, поэтому мой код:

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

Я реализую эти 2 метода, но animationDidStop:finished: получил уведомление, а animationDidStart: - нет.

Вот моя реализация:

- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag {
}

- (void)animationDidStart:(CAAnimation *)anim
{
}

Когда я попытался вызвать animationDidStart: или animationDidStop:finished: напрямую, мое приложение упало и сообщило, что селектор не найден. Но согласно следующим строкам в CAAnimation.h, если я импортирую платформу QuatzCore, все экземпляры NSObject должны отвечать на эти 2 метода. Правильно ли мое понимание?

/* Delegate methods for CAAnimation. */

@interface NSObject (CAAnimationDelegate)

/* Called when the animation begins its active duration. */

- (void)animationDidStart:(CAAnimation *)anim;

/* Called when the animation either completes its active duration or
 * is removed from the object it is attached to (i.e. the layer). 'flag'
 * is true if the animation reached the end of its active duration
 * without being removed. */

- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;

@end

Ответы [ 3 ]

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

Чтение Прекрасного Руководства, я вижу

The selector should have the same arguments as the beginAnimations:context: method,
an optional application-supplied identifier and context. Both of these arguments can
be nil.

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

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

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

В соответствии с документацией UIView сообщение setAnimationWillStartSelector: ожидает селектор с такой подписью, как + (void)beginAnimations:(NSString *)animationID context:(void *)context.Указанный вами селектор имеет неверную подпись и поэтому не будет вызван.Категория CAAnimationDelegate для NSObject даже не задокументирована, поэтому вам, вероятно, нужно точно знать, что вы делаете.Однако ваша проблема в неправильной сигнатуре селектора.

0 голосов
/ 24 октября 2010

В вашем анимационном блоке UIView установка селекторов должна выглядеть следующим образом:

[UIView setAnimationWillStartSelector:@selector(animationWillStart:context:)];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...