iOS UI相关知识梳理

iOS UI相关知识梳理

一、UIView和CALayer

  • UIView为CALayer提供内容,以及处理触摸事件,参与响应链
  • CALayer负责显示内容

二、事件传递和响应链

  • 如果事件一直传递到UIApplication还是没处理,那么会忽略掉
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event;
- (UIView *)pointInside:(CGPoint)point withEvent:(UIEvent *)event;

三、图像显示原理

  • 1)原理
  • 1、CPU输出位图
  • 2、GPU图层渲染,纹理合成
  • 3、把结果放到帧缓冲区中
  • 4、再由视频控制器根据vsync信号在指定的时间前去提取缓冲区中的屏幕显示内容
  • 5、显示到屏幕上
  • 2)CPU工作
  • 1、Layout:UI布局、文本计算
  • 2、Display:绘制
  • 3、Prepare:图片解码
  • 4、Commit:提交位图
  • 3)GPU
  • 1、顶点着色、图元装配、光栅化、片段着色、片段处理

四、UI卡顿掉帧原因

  • iOS硬件设备时钟会发出Vsync(垂直同步信号)信号,然后CPU会计算显示到屏幕的内容,之后将计算好的内容提交到GPU渲染。随后,GPU将渲染结果提交到帧缓冲区,等到下一个Vsync到来的时候讲内容显示到屏幕上。也就是说,一帧内容是由CPU和GPU共同决定的。一般来说,页面滑动流畅是60fps,也就是说1秒有60帧要更新,即每隔16.7ms要产生一帧画面,而如果CPU和GPU一起处理的时间超过了这个时间,就会造成掉帧和卡顿

五、滑动优化

  • CPU
    1、在子线程中创建对象
    2、预排版:布局计算、文本计算、缓存高度
    3、预渲染:异步绘制,异步图片解码
  • GPU
    1、纹理渲染,视图混合
  • 性能思考:遇到性能问题,可以从下面的入手
    1、是否受到CPU和GPU的限制
    2、是否有不必要的CPU渲染
    3、是否有太多的离屏渲染
    4、是否有太多的图层混合操作
    5、是否奇怪的图片格式和尺寸
    6、是否涉及到昂贵的View和效果
    7、view的结构是否合理

六、UI绘制原理

  • 异步绘制:代理负责生成bitmap,然后赋值到layer.contents属性中
[self.layer.delegate displayLayer]

七、离屏渲染

  • On-Screen Rendering:当前屏幕渲染,指的是GPU的操作是在当前屏幕渲染缓冲区中进行

  • Off-Screen Rendering:离屏渲染,分为CPU离屏渲染和GPU离屏渲染;离屏渲染,在当前缓冲区外新开辟一个缓冲区进行渲染,应当尽量避免GPU离屏渲染

  • 避免离屏渲染:CPU需要做额外的渲染操作。通常CPU在做渲染的时候是很快的,但是涉及到Off-Screen渲染的时候情况会有所不同,因为需要额外开辟一个缓冲区进行渲染,然后绘制的过程中会在On-Screen和Off-Screen中来回切换上下文,这个过程比较消耗时间,并且会涉及到每一帧的显示,CPU和GPU处理的时间超过16.7ms,所以处理不当的时候出现掉帧和卡顿的问题

  • 转载请标明出处

  • 如有错误理解,还请各路大神批评指出

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值