美文网首页
关于CAAnimationDelegate代理中的一点坑,望能够

关于CAAnimationDelegate代理中的一点坑,望能够

作者: 番茄炒西红柿啊 | 来源:发表于2017-03-14 14:28 被阅读159次

    根据项目需求,需要完成一个简单地点击图层渐变的动画,我想到的是用CABasicAnimation简单的执行下就行啦!

     [self.animationLayer addAnimation:animation forKey:@"animation"];
    

    动画完成后需要做一些处理,于是在CAAnimationDelegate代理方法中:

    - (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag {
        if(flag) {
            if([self.animationLayer animationForKey:@"animation"] == anim) {
            
                    //处理代码
            }
        }
    }
    

    那么问题就来了,无论如何,代码都执行不到第二个if判断语句,这让我困惑了许久,于是打印log:

    NSLog(@"%@",[self.animationLayer animationForKey:@"animation"] );
    

    果然如我所预料,打印日志如下:

    2017-03-14 14:23:28.622 CWTabBar[2429:93064] (null)
    

    怎么就为空呢?郁闷了半天.最后Google半天,看来还是平时动画写的少,对此的理解还不太深入.
    其实问题关键点是需要设置自己的animation.removedOnCompletion,默认值为YES。具体代码如下面:

    //保证这个animation结束后不要被移除出layer
    animation.removedOnCompletion = NO;
    

    这样才能通过“[layer animationForKey:@“key”];”查找到对应key的animation。

    另一个问题是一系列动画连续播放中间有闪现画面,不连续。

    这个问题需要设置一下

    myAnimation.fillMode = kCAFillModeForwards; 
    //fillMode决定了当前对象在非active时间段的行为
    

    相关文章

      网友评论

          本文标题:关于CAAnimationDelegate代理中的一点坑,望能够

          本文链接:https://www.haomeiwen.com/subject/uufhnttx.html