Skip to content

UI视图

FFur edited this page Aug 16, 2018 · 3 revisions

UI视图

UITableView相关

  • 重用机制

  • 数据同步

绘制原理

图像显示原理

CPU工作

  • Layout
    • UI布局
    • 文本计算
  • Display
    • 绘制(drawRect)
  • Prepare
    • 图片编解码
  • Commit
    • CoreAnimation对输出结果进行提交位图

GPU渲染管线

UI卡顿、掉帧的原因

一般页面滑动流程的效果是:60FPS, 16.7ms产生一帧的画面

滑动优化方案

  • CPU
    • 对象创建、调整、销毁
    • 预排版(布局计算、文本计算)
    • 预渲染(文本等异步绘制,图片编解码等)
  • GPU
    • 纹理渲染(圆角,阴影蒙层,触发离屏渲染)
    • 视图混合(层级重叠)

异步绘制

[layer.delegate displayLayer:]

离屏渲染

  • 图层属性的混合体被指定为在未预合成之前不能直接在屏幕中绘制,所有就需要在屏幕外的上下文中渲染,即离屏渲染

  • 指的是GPU在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作。

  • On-Screen Rendering

    • 意为当前屏幕渲染,指的是GPU的渲染操作是在当前用于显示的屏幕缓冲区中进行
  • Off- Screen Rendering

    • 意为离屏渲染,指的是GPU在当前屏幕缓冲区以外新开辟一一个缓冲区进行渲染操作

何时触发离屏渲染

  • 圆角(当和mask ToBounds-起使用时)
  • 图层蒙版
  • 阴影
  • 光栅化

为何要避免离屏渲染

离屏渲染增加GPU工作量,是的CPU和GPU工作耗时超出16.7ms,出发卡顿掉帧。

  • 创建新的渲染缓冲区,增加内存开销,
  • 上下文切换,多通道管线的合并

事件传递 & 视图响应

请参考:事件分发传递和响应链