美文网首页
UI绘制原理

UI绘制原理

作者: 得_道 | 来源:发表于2020-10-15 10:00 被阅读0次

当调用UIView的setNeedsDisplay方法时,会调用CALayer的同名方法setNeedsDisplay,这时并没有立即发生绘制,而只是相当于在当前layer打上了脏标记, 会在Runloop即将结束时才会调用[CALayer display],而这个方法的内部会判断是否实现了displayLayer这个方法,如果没有实现,那么走系统调用,如果实现了,就为我们异步绘制提供了入口。

image.png

系统绘制实现

image.png

异步绘制实现

通过实现layer的代理方法displayLayer

  • 代理负责生成对应的bitmap
  • 设置该bitmap作为layer.contents属性的值


    image.png

例:

- (void)displayLayer:(CALayer *)layer {
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        __block CGSize size;
        dispatch_sync(dispatch_get_main_queue(), ^{
            size = self.bounds.size;
        });
        UIGraphicsBeginImageContextWithOptions(size, NO, UIScreen.mainScreen.scale);
        CGContextRef context = UIGraphicsGetCurrentContext();
        [self draw:context size:size];
        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();

        dispatch_async(dispatch_get_main_queue(), ^{
            layer.contents = (__bridge id)image.CGImage;
        });
    });
}

问题

在UIView的dreaw方法里绘图,与在CALayer图层代理中绘制的区别:
drawRect:方法是由UIKit组件进行调用,因此里面可以使用一些UIKit封装的方法进行绘图,而直接绘制到图层的方法由于并非UIKit直接调用因此只能用原生的Core Graphics方法绘制。

CALayer图层内部绘图有两个方法:(都需要调用setNeedDisplay方法)

通过图层代理绘制 (CALayerDelegate)

  • (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx;
    通过自定义图层绘制 (CALayer)
  • (void)drawInContext:(CGContextRef)ctx;

所以有三种绘制方式

  1. 直接在UIView上绘制(draw方法中)
  2. 通过图层代理绘制 (CALayerDelegate)
  3. 通过自定义图层绘制 (重写CALayer的drawInContext方法)

相关文章

  • iOS体系

    UI视图 UITableView 事件传递&视图响应 图像显示原理 UI卡顿、掉帧 UI绘制原理/异步绘制 离屏渲...

  • 常见面试问题概括

    UI视图相关 *TableView重用机制? 答: *视图绘制原理?如何实现异步绘制? 答:UIView绘制原理 ...

  • 无标题文章

    APP性能优化 UI卡顿优化 View的绘制原理 UI卡顿原理分析 UI卡顿检测分析 BlockCanary原理分...

  • iOS面试必看

    01UI视图 事件传递机制UI绘制原理异步绘制原理流式页面的性能优化离屏渲染 02OC语言 KVOKVC分类关联对...

  • # UI视图相关

    UI视图相关 UITableView 事件传递&视图响应 图像显示原理 卡顿&掉帧 绘制原理&异步绘制 离屏渲染 ...

  • 布局优化

    1Android绘制原理及工具选择 绘制原理 CPU负责计算显示内容GPU负责柵格化(UI元素绘制到屏幕上) 系统...

  • UI视图

    UI视图考点: UITableView相关 事件传递&视图响应 图像显示原理 卡顿&掉帧 绘制原理&异步绘制 离屏渲染

  • UI绘制原理

    当调用UIView的setNeedsDisplay方法时,会调用CALayer的同名方法setNeedsDispl...

  • UI绘制原理

    1、UIView的绘制流程 对这个流程进行下说明: 1、 当我们调用[UIView setNeedsDisplay...

  • iOS面试题——UI相关:事件传递,图像显示,性能优化,离屏渲染

    UIView与CALayer 事件传递与视图响应链 图像显示原理 UI卡顿掉帧原因 滑动优化方案 UI绘制原理 离...

网友评论

      本文标题:UI绘制原理

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