iOS UI视图问题总结(事件传递、UI掉帧优化、异步绘制等)

2019-02-21  本文已影响0人  num_one

1.事件传递

事件传递常用方法:
事件传递常用方法
// 返回最终哪个视图响应了事件
- (nullable UIView *)hitTest:(CGPoint)point withEvent:(nullable UIEvent *)event;
// 判断点击的位置是否在当前视图范围内
- (BOOL)pointInside:(CGPoint)point withEvent:(nullable UIEvent *)event;  
事件传递流程:
事件传递流程
方法 hitTest:withEvent: 内部实现图
hitTest:withEvent: 内部实现图
例题
例题

问:如果点击C1和C2交叉区域,为什么响应的是C2?
答:因为在事件传递流程中,pointInside:方法会倒序遍历Subviews,就是说越晚添加的视图,层级越高,响应级别越高。

2.图像显示原理及UI卡顿、掉帧的优化

图像显示原理 图像显示原理 CPU工作

1.layout:UI布局frame,文本计算label的size计算等。
2.display:绘制过程drawRect方法。
3.prepare:图片解码。
4.commit:提交位图。

GPU工作
UI卡顿、掉帧的原因
UI卡顿、掉帧的原因

通常FPS=60时UI流畅,此时每隔16.7ms(毫秒)就会绘制一张图。那么在规定的16.7ms内CPU与GPU运行时间大于16.7ms,就会出现掉帧现象。

滑动优化-CPU 滑动优化-GPU

3.滑动优化-CPU

UIView绘制原理
UIView绘制原理 UIView绘制原理-系统绘制流程 UIView绘制原理-异步绘制流程

4.滑动优化-GPU

离屏渲染
离屏渲染1 离屏渲染2

小结

UI视图问题总结

1.略。
2.可以从CPU和GPU两方面回答,CPU层面在子线程上做预排版、图片解码、异步绘制等耗时操作。GPU层面就是尽量避免离屏渲染,异步绘制图像。
3.略。
4.可以体现出单一职责设计原则。

👏👏👏欢迎大家加入群组(IT_大前端技术交流群),技术交流群
IT_大前端技术交流群
上一篇下一篇

猜你喜欢

热点阅读