关于CAAnimationDelegate代理中的一点坑,望能够帮助到新手

根据项目需求,需要完成一个简单地点击图层渐变的动画,我想到的是用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时间段的行为
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥ios动画全貌。在这里你可以看...
    每天刷两次牙阅读 8,551评论 6 30
  • 本文转载自:http://www.cocoachina.com/ios/20150105/10812.html 为...
    idiot_lin阅读 1,281评论 0 1
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌。在这里你可以看...
    F麦子阅读 5,141评论 5 13
  • 显式动画 显式动画,它能够对一些属性做指定的自定义动画,或者创建非线性动画,比如沿着任意一条曲线移动。 属性动画 ...
    清风沐沐阅读 1,971评论 1 5
  • 如果想让事情变得顺利,只有靠自己 -- 夏尔·纪尧姆 上一章介绍了隐式动画的概念。隐式动画是在iOS平台创建动态用...
    雪_晟阅读 582评论 0 1