Layer 动画

基础

单独的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 中是不会有效的。
1  //无效
2 NSLog(@"outside animation block: %@",
3 [myView actionForLayer:myView.layer forKey:@"position"]);
4 //在block才有效
5 [UIView  animateWithDuration:0.3 animations:^{
6              NSLog(@"inside animation block: %@",
7                [myView actionForLayer:myView.layer forkey:@"position"]);
8 }];
9

打印结果

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

对于 view 中的 layer 来说只会进行到搜索 action 这一步,但是对于单独的 layer 还有其它四个步骤要完成,详情见 CALayer 的官方文档对 actionForKey 的说明。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容