iOS-UIView与CALayer关系

iOS开发中UIView和CALayer有大部分功能是相似的,基本上UIView能支持的功能CALayer也支持.iOS之所以有两套并行的树形结构,是因为iOS与Mac OS之间有很大不同,触摸实现的方式和鼠标键盘的用户交互方式有本质的不同.iOS用UIKit和UIView,而Mac OS用AppKit和NSView进行视图绘制,布局和动画,中间的公共逻辑抽取之后形成了核心动画框架.CALayer作为视图布局的公共部分,更能做到划分清楚责任,避免重复代码.

UIView和CALayer关系:

1.事件响应:UIView可以响应触摸事件,CALayer不可以.UIKit使用UIResponder作为响应对象,来响应系统传递过来的事件并进行处理.UIApplication、UIViewController、UIView、和所有从UIView派生出来的UIKit类(包括UIWindow)都直接或间接地继承自UIResponder类.在 UIResponder中定义了处理各种事件和事件传递的接口, 而 CALayer直接继承 NSObject,并没有相应的处理事件的接口.

2.坐标:UIView坐标通过frame,bounds来显示,最终也是通过CALayer来控制.但是CALayer可以通过position与anchorPoint计算位置.

3.动画:UIView本身是由CoreAnimation来实现的.CALayer类来管理实际绘图.CALayer 内部维护着三分 layer tree,分别是 presentLayer Tree(显示树),modeLayer Tree(模型树), Render Tree (渲染树).iOS动画修改的的动画属性,实际上是修改presentLayer的属性值,而最终展示在界面上的是modelLayer.

4.渲染:当更新CALayer视图层,改变不能立即显示在屏幕上.当所有的层都准备好时,可以调用setNeedsDisplay方法来重绘显示.

view.layer.setNeedsDisplay()

5.变换与变形:CALayer层可以添加3D或仿射变换,可以分别设置层的transform或affineTransform属性.CATransform3D的数据结构定义了一个同质的三维变换(4x4 CGFloat值的矩阵,用于图层的旋转,缩放,偏移,歪斜和应用的透视.

        view.layer.transform = CATransform3DMakeScale(-1.0,-1.0,1.0)
        
        let transform:CGAffineTransform = CGAffineTransform(rotationAngle: 45.0);
        view.layer.setAffineTransform(transform)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,295评论 4 61
  • 7、不使用IB是,下面这样做有什么问题? 6、请说说Layer和View的关系,以及你是如何使用它们的。 1.首先...
    AlanGe阅读 751评论 0 1
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥ios动画全貌。在这里你可以看...
    每天刷两次牙阅读 8,613评论 6 30
  • “本文参加#未完待续 就要表白#活动,本人承诺,文章内容为原创,且未在其他平台发表过。” 是夏,让桃花满溢芬...
    守候此生韶华阅读 353评论 0 0
  • 近日,最火的新闻可能就是“朴槿惠闺密”事件了。 总统内阁的机密文件居然能随意的给编外人员随意观看,居然还不止一个…...
    牛田春水阅读 364评论 0 0