Layer动画 - ZhiJianShuSheng/Read-And-Learn GitHub Wiki

基础

单独的layer

  • 不需要附加到view上能够直接显示在屏幕上的单独的layer有AVCaptureVideoPreviewLayer和CAShapeLayer
  • 改变任何属性就会出发旧值到新值

附加到view上的layer

  • 改变属性隐式动画的layer不起作用,UIview默认情况是禁止layer动画,但在animation block中能用

CAAction

  • 当layer属性改变时,layer都会寻找合适的action来实行这个改变。layer向它的delegate发送actionForLayer:forKey:消息找对应的action。如果是附加到view上的layer,当它的属性改变后会向view请求一个动作,如果这个属性的改变不是在动画block中是不会有效的。
//无效
NSLog(@"outside animation block: %@",
[myView actionForLayer:myView.layer forKey:@"position"]);

//在block才有效
[UIView animateWithDuration:0.3 animations:^{
     NSLog(@"inside animation block: %@",
     [myView actionForLayer:myView.layer forKey:@"position"]);
}];

打印结果

outside animation block: <null>
inside animation block: <CABasicAnimation: 0x8c2ff10>

对于view中的layer来说只会进行到搜索action这一步,但是对于单独的layer还有其它四个步骤要完成,详细见CALayer的官方文档对actionForKey的说明:https://developer.apple.com/library/mac/documentation/GraphicsImaging/Reference/CALayer_class/index.html#//apple_ref/occ/instm/CALayer/actionForKey:

⚠️ **GitHub.com Fallback** ⚠️