Делегат CABasicAnimation для анимацииDidStop?
Я следую примеру внизу страницы, чтобы вызвать функцию animationDidStop
.
http://www.informit.com/articles/article.aspx?p=1168314&seqNum=2
Автор говорит:
У меня есть объект, который специально предназначен для делегата анимации, и все, что он делает, это привязка к целевому объекту, принятие сообщения animationDidStop: и затем освобождение.
Это говорит о том, что вы не должны делать:
[animation setDelegate:self];
Я новичок в программировании приложений, может кто-нибудь изложить, как я могу это сделать? Или отправьте мне ссылку, где это объясняется.
Ответы
Ответ 1
Реализовать:
- (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
Ответ 2
Иногда установка фактического значения вашего слоя на значение toValue при завершении анимации. Если это более сложная анимация, такая как анимация цветов CAGradientLayer, это необходимо.
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag
{
self.gradientLayer.colors = (NSArray *)((CABasicAnimation*)theAnimation).toValue;
}
Ответ 3
Просто установите
[UIView setAnimationDelegate:self];
не будет вызывать какие-либо из методов делегирования анимации, когда анимация начинается или заканчивается.
Эта проблема может быть решена одним из следующих обходных решений.
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