IOS 技术

CALayer & UIView

2018-12-13  本文已影响0人  LeeDev

UiView 和 CALayer 的关系就是 典型的适配模式的经典应用
UIView 是 继承UIReponse, 同时 持有一个CALayer 的属性

1.讨论CALayer 的几个属性

1). CALayer 有个 重要的属性 就是 contents (就是CGImage 或者 NSImage ,说到底就是一个 位图 bitMap),其实后面设计到的绘制其实都是和这个属性有关
2). contentsGravity (UIView 中是contentMode) : 就是设置 位图的显示状态
3). contentsScale : 默认是 屏幕的scale,比如 值为2,就是说 我们的屏幕的一个点 绘制 2个像素点。
4).contentsRect: 这个是单位Rect, 比如设置(0,0,0.5,0.5) 显示单位位置的 这个区域
5).contentsCenter : 也是一个'单位rect' ,主要是 设置 哪些区域 不需要被拉伸,比如我们聊天的气泡

2. CALayer 的 绘制

其实就是怎么样去绘制 contents,那么就需要考虑我们的CALayerDelegate

1).首先 layer 去调用 setNeedDisplay的时候,在Runloop 的 beforeWaiting 的时机去 调用 -(void)displayLayer:(CALayerCALayer *)layer; (特别注意这个时候 调用 UIGraphicsGetCurrentContext(),返回的值是nil).
2).假设没有实现上面那个方法,就会调用 - (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx 这个时候 就获取到了ctx,但是 UIGraphicsGetCurrentContext() 任然为 nil
3).最后 如果 是 UIView 中,而且没有实现上面的代理的方法,那么就会 调用drawRect 方法;

上一篇 下一篇

猜你喜欢

热点阅读