美文网首页
1.视图事件传递和事件响应流程

1.视图事件传递和事件响应流程

作者: Glenn_h | 来源:发表于2020-01-13 10:07 被阅读0次

1.UIView和CALayer

  • UIView提供内容、处理触摸等事件、参与响应链
  • CALayer负责显示内容

2.事件传递

返回那个视图响应点击事件
func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { } 
判断点击的点是否在当前视图范围内
func point(inside point: CGPoint, with event: UIEvent?) -> Bool {}
事件传递流程

3.图像显示原理

1.CPU:输出位图
2.GPU :图层渲染,纹理合成
3.把结果放到帧缓冲区(frame buffer)中
4.再由视频控制器根据vsync信号在指定时间之前去提取帧缓冲区的屏幕显示内容显示到屏幕上

4.UI卡顿的原因

一般来说,页面滑动流畅1s 60帧 = 16.7ms 1帧,如果CPU和GPU加起来的处理时间超过了16.7ms,就会造成掉帧甚至卡顿。

5.滑动优化方案

CPU:把以下操作放在子线程中
1.对象创建、调整、销毁
2.预排版(布局计算、文本计算、缓存高度等等)
3.预渲染(文本等异步绘制,图片解码等)

GPU:
纹理渲染,视图混合

一般遇到性能问题时,考虑以下问题:
是否受到CPU或者GPU的限制?
是否有不必要的CPU渲染?
是否有太多的离屏渲染操作?
是否有太多的图层混合操作?
是否有奇怪的图片格式或者尺寸?
是否涉及到昂贵的view或者效果?
view的层次结构是否合理?

相关文章

网友评论

      本文标题:1.视图事件传递和事件响应流程

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