CALayer & UIView

作者: LeeDev | 来源:发表于2018-12-13 11:59 被阅读0次

    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 方法;

    相关文章

      网友评论

        本文标题:CALayer & UIView

        本文链接:https://www.haomeiwen.com/subject/dupvhqtx.html