iOS UI

1.数据源同步方案? 

并发访问,深拷贝,记录操作(耗内存,记录操作);串行访问,排版和操作全部在一个子线程串行队列操作(任务多,会延时)

2.UIView和CALayer的关系?

的UIView只负责处理触摸等事件,参与响应链; CALayer的负责显示内容的内容

uiview包含一个calayer和一个bgcolor(bgcolor对层同名属性方法的包装)

显示部分是图层的内容(后备存储实际位图类型的位图)

3.事件传递?

- (uiview *)hittest哪个视图响应事件 - (bool)pointinside判断点击位置是否在视图范围内

流程:点击屏幕--uiapplication - 一个UIWindow - 则hitTest - pointinside

判断:隐藏的userinteractionenabled alpha> 0.01

4.图像显示原理

cpu(位图)--- gpu(位图图层渲染纹理合成) - 放到帧缓冲区(帧缓冲区)---视频控制器(根据vsync信号在指定时间前提取对应帧缓冲区中的屏幕显示内容)---显示器

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW8yMjE4ODk3,size_16,color_FFFFFF,t_70

CPU工作:layout(UI布局文本计算)显示(绘制drawrect)prepare(图片编解码)commit(提交位图)

GPU渲染管线:顶点着色图元装备光栅化片段着色片段处理

5.优化方案

CPU(减轻压力和时长)

对象创建,调整,销毁(放到子线程)预排版(布局计算文本计算提前计算放到子线程)预渲染(文本等异步绘制,图片编解码)

GPU

纹理渲染(避免离屏渲染)视图混合(少点视图层级)

6.UIView的绘制原理  

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW8yMjE4ODk3,size_16,color_FFFFFF,t_70

系统绘制流程:watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW8yMjE4ODk3,size_16,color_FFFFFF,t_70

异步绘制:

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW8yMjE4ODk3,size_16,color_FFFFFF,t_70

【layer.delegate displaylayer:]代理负责生成对应的位图;设置该位图作为layey.contents属性的值

7.离屏渲染屏幕渲染屏幕上的屏幕渲染

GPU在当前屏幕缓冲区以外新开辟一个缓冲区进行操作,某些属性在未预合成之前,不能用于屏幕直接显示,触发离屏渲染

场景:圆角(当和和masktobounds一起使用时),图层蒙版,阴影,光栅化。

当前屏幕渲染,说的是gpu的渲染操作是在当前用于显示的屏幕缓冲区中进行

为何要避免:会增加GPU的工作量,导致CPU和GPU的工作量超出16.7毫秒,会导致用户界面卡顿掉帧

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值