我有两个代码块(在another topic中也有描述)
- (void)AnimateImage:(NSString*)direction{
self.CurrentAnimal.image = [images objectAtIndex:image_nr];
CATransition *animation = [CATransition animation];
[animation setDuration:1.0];
[animation setType:kCATransitionPush];
if([direction isEqualToString:@"left"]){
[animation setSubtype:kCATransitionFromLeft];
}
else {
[animation setSubtype:kCATransitionFromRight];
}
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
[[self.CurrentAnimal layer] addAnimation:animation forKey:nil];
}
和
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag
{
//do what you need to do when animation ends...
}
我知道我需要“设置委托属性并实现方法”来捕获animationDidStop事件,但我无法使其正常工作。
问题 - 如何设置我的.h和.m文件,以便在CATransition动画停止时我可以使用此方法执行代码?
答案 0 :(得分:1)
设置代理:
CATransition *animation = [CATransition animation];
....
[animation setDelegate:self];
[animation setDuration:1.0];
[animation setType:kCATransitionPush];
答案 1 :(得分:1)
您首先必须将Delegate
添加到您创建的CATransition
对象中
CATransition *animation = [CATransition animation];
[animation setDelegate = self];
[animation setValue:animation.values.lastObject forKey:@"myAnimationKey"];
如果为动画设置了一个键,则可以准确地检查结束的动画。如果您只有一个动画,则不需要特定的键。如果您设置了一个键,您可以检查哪个动画结束:
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{
if(anim == [animation.layer animationForKey:@"myAnimationKey"]){
}
}