Ios animationDidStop方法的多个动画?
我知道必须使用此方法才能在动画完成时获取代理方法:Ios animationDidStop方法的多个动画?,ios,animation,delegates,core-animation,Ios,Animation,Delegates,Core Animation,我知道必须使用此方法才能在动画完成时获取代理方法: - (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag { 问题是,我如何区分多个caanimation,比如2个或更多 我在谷歌上搜索了一下,没有发现任何有用的东西 请与我分享你是如何做到这一点的 谢谢 您可以像这样为CAAnimation实例设置键/值对象: CABasicAnimation *theAnimation = [CABasicAnima
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag {
问题是,我如何区分多个caanimation,比如2个或更多
我在谷歌上搜索了一下,没有发现任何有用的东西
请与我分享你是如何做到这一点的
谢谢 您可以像这样为CAAnimation实例设置键/值对象:
CABasicAnimation *theAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
[theAnimation setValue:@"animation1" forKey:@"id"];
theAnimation.delegate = self;
CABasicAnimation *theAnimation2 = [CABasicAnimation animationWithKeyPath:@"opacity"];
[theAnimation2 setValue:@"animation2" forKey:@"id"];
theAnimation2.delegate = self;
检查在委托方法中调用了哪一个:
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{
if([[anim valueForKey:@"id"] isEqual:@"animation1"]) {
NSLog(@"animation1");
}
if([[anim valueForKey:@"id"] isEqual:@"animation2"]) {
NSLog(@"animation2");
}
}
一个
CAAnimation
对象应该经常被重用,这就是为什么我不喜欢给它一个特定的键(因为它不是唯一的)。它的独特之处在于与CALayer的关联addAnimation:forKey:
。因此,我在animationDidStop
中使用以下代码:
if animation == layer.animationForKey(AnimationKeys.scaleUp) {
// scaleUp animation has completed
}
我感到惊讶和懊恼的是,如果(anim==theAnimation){…},你不能只做一个
——这对于错误捕捉和自动完成等来说是非常好的。有人知道你为什么不能这样做吗?当我记录时,anim
值似乎已设置并保存在内存中。animation
声明为本地,您无法在animationDidStop中访问它。若你们宣布它是全局的,那个么这个问题将是一个非常糟糕的问题,因为你们可以访问那个ivaranywhere@toblerpwn将动画添加到层时,该动画将复制到该层,而不是直接引用。这就是为什么不能在动画上使用==运算符的原因。请注意,CAAnimation
的delegate
很强,因此可能需要将其设置为nil
以避免保留循环![theAnimation2设置值:@“animation2”forKey:@“id”]不起作用!!!!卡巴西尼化对象的变化如@akaralar所说。为什么这是正确答案?只有在设置“animation.isRemovedOnCompletion=false”时,这才起作用,否则动画一完成就从层中删除,并且永远不会输入if语句。