现在的位置: 首页 > 综合 > 正文

UIView和CALayer的区别

2014年02月22日 ⁄ 综合 ⁄ 共 826字 ⁄ 字号 评论关闭
1.UIView是iOS系统中界面元素的基础,所有的界面元素都继承自它。它本身完全是由CoreAnimation来实现的(Mac下似乎不是这样)。它真正的绘图部分,是由一个叫CALayer(CoreAnimationLayer)的类来管理。UIView本身,更像是一个CALayer的管理器,访问它的跟绘图和跟坐标有关的属性,例如frame,bounds等等,实际上内部都是在访问它所包含的CALayer的相关属性。


2.UIView有个layer属性,可以返回它的主CALayer实例,UIView有一个layerClass方法,返回主layer所使用的类,UIView的子类,可以通过重载这个方法,来让UIView使用不同的CALayer来显示,例如通过

1

- (class) layerClass {

2

  return ([CAEAGLLayerclass]);

3

}

使某个UIView的子类使用GL来进行绘制。


3.UIView的CALayer类似UIView的子View树形结构,也可以向它的layer上添加子layer,来完成某些特殊的表示。例如下面的代码

1

grayCover = [[CALayer alloc] init];

2

grayCover.backgroundColor = [[[UIColor blackColor]colorWithAlphaComponent:0.2] CGColor];

3

[self.layer addSubLayer: grayCover];

会在目标View上敷上一层黑色的透明薄膜。


4.UIView的layer树形在系统内部,被系统维护着三份copy(这段理解有点吃不准)。

第一份,逻辑树,就是代码里可以操纵的,例如更改layer的属性等等就在这一份。

第二份,动画树,这是一个中间层,系统正在这一层上更改属性,进行各种渲染操作。

第三份,显示树,这棵树的内容是当前正被显示在屏幕上的内容。

这三棵树的逻辑结构都是一样的,区别只有各自的属性。

抱歉!评论已关闭.