IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> UI视图相关面试问题汇总 -> 正文阅读

[移动开发]UI视图相关面试问题汇总

1:事件传递与视图响应链

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event?哪个视图响应了这个事件返回哪个视图

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event?某一个点击的位置是否在当前视图范围内如果在的话就返回YES

1.1:事件传递流程如下

1.2: hitTest:withEvent:系统实现

1.3: 视图事件响应

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event

- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event

- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event

传递当前视图-传递到父视图-UIWindows-UIApplication-如果在找不到就忽视掉


2.0:滑动优化方案和思路

CPU:

? ? ? ? 对象创建,调整,销毁可以放到子线程去做,这样可以节省一部分cpu的时间

? ? ? ? 预排版(布局计算,文本计算)可以放到子线程去做,这样主线程就会有更多时间去响应用户的交互

? ? ? ? 预渲染(文本等异步绘制,图片编解码)

GPU:

? ? ? ? 纹理渲染

? ? ? ? 视图混合


3.0:UIView的绘制原理

3.1:系统绘制流程

3.2:异步绘制

[layer.delegate displayLayer:]

? ? ? ? 代理负责生成对应的bitmat

? ? ? ? 设置该bitmap作为layer.contents属性的值

3.3:UIView和CALayer之间的关系是怎样的?

UIView负责事件传递和相应的

CALayer负责视图显示工作

用到了6大设计模式中的单一职责原则


4:离屏渲染?

? ? ? ? 在屏渲染,指的是GPU的渲染操作是在当前用于显示的屏幕缓冲区进行

????????离屏渲染,指的是GPU在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作? ? ?

4.1:什么是离屏渲染 ?

当我们指定了UI视图的某些属性,标记为它在预合成之前不能用于当前屏幕上面直接显示的时候就会触发离屏渲染,而离屏渲染在GPU层面指的是GPU在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作

4.2:何时触发?

? ? ? ? 圆角(当和maskToBounds一起使用时)

? ? ? ? 图层蒙版

? ? ? ? 阴影

? ? ? ? 光栅化

4.3:为何要避免?

????????离屏渲染会创建新的渲染缓冲区,增加开销。

????????因为有多通道渲染管线最终需要把多通道渲染结果最终的合成,那需要上下文的切换,就会产生GPU额外的开销

????????总结:在触发离屏渲染的时候,会增加GPU的工作量,很有可能导致CPU和GPU加起来的总耗时超出16.7ms,那么可能就会导致UI的卡顿和掉帧,所以我们需要避免离屏渲染。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-10 10:58:28  更:2021-09-10 11:00:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:53:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码