UI视图篇

2020-05-29  本文已影响0人  again_onceagain

UITableView相关

重用机制

数据源同步问题

事件传递&视图响应

UIView和CALayer

设计模式:单一职责原则(职责分工)

事件传递


- (UIView*)hitTest:(CGPoint)pointwithEvent:(UIEvent*)event

- (BOOL)pointInside:(CGPoint)pointwithEvent:(UIEvent*)event

image

点击屏幕 -> UIApplication -> UIWindow -> hitTest:withEvent: -> pointInside:withEvent:


    override func touchesBegan(_touches:Set, with event:UIEvent?)

    override func touchesMoved(_touches:Set, with event:UIEvent?)

    override func touchesCancelled(_touches:Set, with event:UIEvent?)

没有处理的事件 就会丢弃,不是引起崩溃 Tip(和方法找不到区分开)

图像显示原理

经过CPU、GPU、Frame Buffer(帧缓冲区)、视频控制器、显示器

CPU: Layout -> Display -> Prepare -> Commit

- Layout: UI布局和文本计算

- Display:绘制(drawRect:)

- Prepare:图片编解码

- Commit:提交位图

GPU渲染管线

- 顶点着色

- 图元装配

- 光栅化

- 片段着色

- 片段处理

卡顿&掉帧

image

滑动优化方案

CPU:
- 对象的创建、调整、销毁
- 预排版(布局计算、文本计算)
- 预渲染(文本等异步绘制,图片编解码等)
GPU:

绘制原理&异步绘制

image

离屏渲染

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

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

何时会触发?

为何要避免?

会增加GPU的工作量,导致CPU+GPU的工作时间大于16.7ms 造成卡顿、掉帧

上一篇下一篇

猜你喜欢

热点阅读