Методы делегата CAAnimation не вызываются для делегата - PullRequest
3 голосов
/ 27 декабря 2011

Делегат - мой контроллер представления.

Я устанавливаю делегата через:

CABasicAnimation theAnimation;
theAnimation.delegate = self;

Затем я настраиваю анимацию и добавляю анимацию к слою и проверяю, что она правильно анимируется на устройстве.

Однако я не могу заставить этот метод делегата быть вызванным:

-(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag {
    NSLog(@"animationDidStop called.");
}

Есть идеи?

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

Спасибо!

1 Ответ

2 голосов
/ 27 декабря 2011

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

Делегирование и формальные протоколы являются ортогональными понятиями:
Формальные протоколы являются довольно недавним дополнением к языку программирования Objective-C - фактически они были введены после CoreAnimation (ранее LayerKit).

Способ действия до введения @protocol - и способ QuartzCore все еще работает - объявлял категорию на NSObject как так называемый "Неформальный протокол". Лишь недавно Apple начала формализовать их - см. NSURLConnection для такого примера, который получил свои протоколы делегатов с текущими выпусками iOS / OS X.

После этого краткого упоминания истории, теперь к вашей проблеме:

Если то, что вы показываете, является дословной копией вашего кода, то это не сработает. На самом деле, если вы не используете ARC, вам очень повезло, что приведенный выше код не дает сбой из-за EXC_BAD_ACCESS. Вы должны полностью установить значение animation на что-то значимое, прежде чем пытаться отправлять на него сообщения ...

...