CALayer寻找Action object的顺序

CoreAnimation 使用action object去实现layer的隐式的动画的。action object实现了CAAction协议,并定义了相关的行为在layer上进行。所有的CAAnimation对象都实现了此协议,当layer的可动画的属性的值改变的时候,这些对象通常会赋值并执行。

可动画的属性就是一种action。

自定义Action Object

为了定义一个action object,需要实现CAAction协议的方法runActionForKey:object:arguments:.
当定义了一个action object,我们必须决定什么时间去触发此action。action object可以在下面几种情况下触发:
1.当layer的属性发生改变的时候,可以是任何属性,不仅仅是可动画的属性,也可以使自定义的属性。这时action的key为属性的名字。
2.layer变为可见的,或者添加到另一个layer上时,此时action的key为kCAOnOrderIn.
2.layer从superlayer上移除时,此时action的key为kCAOnOrderOut.
3.当layer进行一个transition animation时,此时action的key为kCATransition.

Core Animation寻找action object的顺序

在一个action执行之前,layer需要找到对应的action object去执行。当layer上一些事件(上面的三种)发生时,layer会调用自己的 actionForKey: 方法去寻找对应的action object,
Core Animation提供的查找顺序如下:
1.如果layer有一个delegate ,此delegate实现了actionForLayer:forKey方法,layer会调用此方法,此方法可以根据对应的key返回相应的action object,如果返回的是nil,则继续步骤2,如果返回的为NSNull对象,则立即停止搜索。
2.layer在actions字典中去寻找。
3.layer在style字典中去寻找(style字典中有一个actions的key,其value为一个字典,layer就是在这个字典中去寻找key对应的action object)
4.layer调用类方法defaultActionForKey:
5.layer进行Core Animation定义的implicit action。

上面5步需要解释的是style字典,一般自定义的属性的action存到这个里面。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值