UIView与CALayer
来源:互联网 发布:淘宝开店找货源 编辑:程序博客网 时间:2024/05/17 12:01
CALayer与UIView
1、 UIView可以响应事件,Layer不可以
UIKit使用UIResponse作为响应对象,来响应系统传递过来的事件并进行处理。UIApplication、UIViewController、UIView、和所有从UIView派生出来的UIKit类(包括UIWindow)都直接或间接地继承自UIResponder类。
在UIResponse中定义了处理各种事件和事件传递接口,而CALayer直接继承NSObject,并没有相应的处理事件的接口;
2.View和CALayer的Frame映射及View如何创建CALayer.
一个 Layer 的 frame 是由它的anchorPoint,position,bounds,和 transform 共同决定的,而一个 View 的 frame 只是简单的返回 Layer的 frame,同样View 的 center和 bounds 也是返回 Layer 的一些属性。
3.UIView主要是对显示内容的管理而 CALayer 主要侧重显示内容的绘制。UIView 是 CALayer 的CALayerDelegate。
4.在做 iOS 动画的时候,修改非 RootLayer的属性(譬如位置、背景色等)会默认产生隐式动画,而修改UIView则不会。
对于每一个 UIView 都有一个 layer,把这个 layer 且称作RootLayer,而不是 View 的根 Layer的叫做 非RootLayer。我们对UIView的属性修改时时不会产生默认动画,而对单独 layer属性直接修改会,这个默认动画的时间缺省值是0.25s.
总结
- 每个 UIView 内部都有一个 CALayer 在背后提供内容的绘制和显示,并且 UIView 的尺寸样式都由内部的 Layer 所提供。两者都有树状层级结构,layer 内部有 SubLayers,View 内部有 SubViews.但是 Layer 比 View 多了个AnchorPoint
- 在 View显示的时候,UIView 做为 Layer 的 CALayerDelegate,View 的显示内容由内部的 CALayer 的 display
- CALayer 是默认修改属性支持隐式动画的,在给 UIView 的 Layer 做动画的时候,View 作为 Layer 的代理,Layer 通过 actionForLayer:forKey:向 View请求相应的 action(动画行为)
UIView 拥有 CALayer,CALayer 的 Delegate 是UIView;
最大的区别是图层(CALayer)不会直接渲染到屏幕上。
UIView是iOS系统中界面元素的基础,所有界面元素都是继承自它。它本身完全是由CoreAnimation来实现。
真正的绘图部分,是由一个CALayer类来管理。
一个UIView上可以由n个CALayer,每个CALayer显示一种东西,增强UIView的展现能力。
UIView与CALayer关系总结
UIView和CALayer二者缺一不可,没有CALayer,UIView看不到内容;没有UIView,CALayer像什么内容也没有一样。
1、UIView继承UIResponder,而CALayer继承NSObject。所以UIView可以响应事件,CALayerb不能。
2、UIView有layer属性,有layerClass方法,而CALayer类中没有UIView相关属性和方法。UIView主要负责管理内容,而CALayer主要负责渲染、呈现、隐式动画。
1)获取UIView的CALayer属性,从UIView->CALayer。通过重写layerClass方法,change其中CALayer类型。
2)获取UIView的frame、bounds等属性,其实获取的对应CALayer的属性,设置原理也一样。(隐式动画指的是,由于非rootLayer的frame、bounds等属性值改变时,所产生的界面上的渐变过程)
3、UIView和CALayer都采用树结构,superView/superLayer、subView/subLayer、addSubView:/addSubLayer:等。
4、CALayer维护着三份layertree,分别是presentLayer tree、modelLayer tree、rendertree,在做动画的时候,我们修改动画的属性,其实是修改presentLayer的属性值,而最终展示在界面上的其实是提供UIView的modelLayer。
- CALayer与UIView
- UIView与CALayer
- UIView与CAlayer
- CALayer与UIView
- UIView与CAlayer
- UIView与CAlayer
- CALayer 与UIView介绍
- CALayer与UIView
- CALayer与UIView
- UIView与CALayer区别
- UIView与CALayer
- CALayer与UIView
- UIView与CALayer
- UIView与CALayer
- UIView与CALayer
- CALayer与UIView对比
- CALayer与UIView的关系
- UIView与CALayer的关系
- 查询mysql的QPS
- Java多线程编程7--拾遗增补--线程组
- Snmp学习总结(二)——SNMP4J介绍
- RatingBar
- iOS备忘录之开发经验总结
- UIView与CALayer
- scanf 用法及陷阱(转)
- 值得收藏的英语名言大全
- android图片压缩终极解决方案
- Oracle VM + centos7.1+openstack kilo 多结点安装教程---neutron的安装(2)
- JavaScript学习笔记九
- 关于在textvie中提取电话号码,点击跳转拨打界面
- 前端中select选中相关
- RecyclerView抢夺item焦点的问题