美文网首页
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