在 animationDidStop 中,动画的地址与我添加到图层的动画地址不同?

Posted

技术标签:

【中文标题】在 animationDidStop 中,动画的地址与我添加到图层的动画地址不同?【英文标题】:in animationDidStop, animation 's address is not the same address as the animation i add to the layer? 【发布时间】:2012-12-07 07:20:53 【问题描述】:

这样的代码:我在我的视图控制器中存储了 3 个动画,但是当 - (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag 被调用时,我发现动画的地址与任何地址都不相同其中,为什么?

- (void) redoAni

    circleHalfCaloryMask.alpha = 1;
    circleHalfTimeMask.alpha = 1;
    circleHalfStopWatchMask.alpha = 1;


    //[circleHalfCalory removeFromSuperview];
    //circleHalfCalory.alpha = 0;
    [circleHalfCaloryMask.layer addAnimation:rotate3 forKey:@"rotate3"];
    [circleHalfStopWatchMask.layer addAnimation:rotate2 forKey:@"rotate2"];
    [circleHalfTimeMask.layer addAnimation:rotate1 forKey:@"rotate1"];




    - (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
    
        if (anim == rotate1)
        
            circleHalfTimeMask.alpha = 0;
        
        else if (anim == rotate2)
        
            circleHalfStopWatchMask.alpha = 0;
        
        else if (anim == rotate3)
        
            circleHalfCaloryMask.alpha = 0;
        
        else
        
        
    

在 gdb 中:

rotate1 CABasicAnimation *  0x07297280
rotate2 CABasicAnimation *  0x072899a0
rotate3 CABasicAnimation *  0x07297d40
anim    CABasicAnimation *  0x07285010

【问题讨论】:

试试这个答案:***.com/questions/1255086/… 【参考方案1】:

文档说:

(void)addAnimation:(CAAnimation *)anim forKey:(NSString *)key

动画

要添加到渲染树的动画。注意对象是 由渲染树复制,未引用。任何后续 对对象的修改不会传播到渲染中 树。

【讨论】:

好的,我明白了,非常感谢,所以如果我想区分它们,我必须设置一些属性。比如:[rotate2 setValue:@"rotate2" forKey:@"id"];

以上是关于在 animationDidStop 中,动画的地址与我添加到图层的动画地址不同?的主要内容,如果未能解决你的问题,请参考以下文章

多个UIButton的旋转动画,animationDidStop怎么知道哪个停了?

立即调用 animationDidStop 方法

animationDidStop:finished: 未调用

animationDidStop:完成:委托方法没有被调用

如何在 animationDidStop 委托中识别 CAAnimation?

CABasicAnimation - 未调用 animationDidStop