在CALayer的属性发生变化时会被调用,然后会根据对应的event来寻找一个遵循 CAAction协议的对象,寻找流程如下:
如果CALayer的delegate存在并实现了 actionForLayer:forKey:方法,那么调用该方法寻找;
从CALayer的actions字典中根据event为key值寻找;
从CALyaer的style层级中的actions字典中根据event为key值寻找;
调用类方法 +defaultActionForKey:方法寻找。
在以上步骤中,只要有一步找到action,那么就停止。
@interface TestView : UIView
@end
@implementation TestView
- (nullable id<CAAction>)actionForLayer:(CALayer *)layer forKey:(NSString *)event
{
// return [NSNull null];
id k = [super actionForLayer:layer forKey:event];
return k;
}
@end
//修改 TestView.layer 实例对象的 position,并不会有动画,UIView 的root layer 不会有隐式动画。
//原因,上面代码打断点 发现 k 是 NSNull 的一个实例。在这里截断了。所以没有动画。
mark :
https://blog.csdn.net/TuGeLe/article/details/103412222