绘制阴影引发的 iOS 绘图性能问题总结
来源:互联网 发布:计算机编程英语 编辑:程序博客网 时间:2024/06/07 10:48
转自:http://blog.devdlh.com/blog/2013/03/18/performance-problerm-caused-by-shadowpath/
绘制阴影引发的 iOS 绘图性能问题总结
在 iOS 开发中,通过设置 layer 的 shadowColor、shadowOpacity、shadowOffset、shadowRadius 几个属性可以很方便的为 UIView 添加阴影效果。但是前段时间碰到一个问题,在添加了阴影后,会出现动画卡顿的现象。在一番 Google 以后找到了解决方案,需要为阴影指定路径,即设置 layer 的 shadowPath 属性。例如:
不指定阴影路径时,绘制阴影会产生大量的 Offscreen-Rendered 。而 Offscreen-Rendered(离屏渲染)和 Blending(混合)是 iOS 绘图中对性能影响比较大的两方面。
Offscreen-Rendered
离屏渲染意味着某一区域每帧渲染了两次。大部分离屏幕渲染由阴影和遮障绘制造成。以阴影绘制为例例,iOS 会先绘制目标的阴影,然后绘制目标本身。当我们没有设置阴影的路径时,iOS 在每次绘制前会递归每个子层来计算阴影的精确路径,这是非常消耗性能的,也导致了动画时出现卡顿。
因此,一般情况下需要指定阴影的路径。当 View 的 bound 改变时,重新设置阴影路径。如果 View 的 bound 做动画,则需要使用 CAAnimation 为 shadowPath 设置动画。
参考文档。
Blending
iOS 在渲染每一帧时,都将计算每一个像素点的颜色。当最上面的层不透明时,只需取最上面的层的颜色。而当上面的层存在透明度时,需要混合每一层的颜色来计算得到最终显示的颜色。自上而下有透明度的层越多,计算量越大,这也会导致动画时性能降低。因此,我们在开发中,要尽量减少不必要的透明层。
使用 Instruments 检测绘图性能
使用 Instruments 的 Core Animation 模板可以很方便的检测应用中的 Blending 和 Offscreen-Rendered 。
勾选 Color Offscreen-Rendered Yellow 选项将高亮进行离屏渲染的区域。
勾选 Color Blended Layers 将显示进行图层混合的区域,颜色越深表示计算量越大。
- 绘制阴影引发的 iOS 绘图性能问题总结
- iOS的阴影绘制及性能优化
- 【IOS 开发学习总结-OC-65】Quartz 2D绘图(4-2)——绘制文本+设置阴影+使用路径
- CONCATENATION 引发的性能问题
- iOS绘图 - 基本线条的绘制
- iOS绘图 - 自定义饼图的绘制
- ios绘图:绘制图形
- 基于iOS核心绘图中的矩阵操作引发的思考
- 百万数据引发的性能瓶颈问题
- 自定义函数引发的性能问题
- 解决layer层圆角引发的性能问题
- 绘制阴影 优化 + UIImage 性能优化
- iOS绘图 - 自定义柱状图绘制
- iOS CGPath提升阴影性能
- IOS开发:xcode5版本引发的问题
- IOS 给UIView绘制圆角、阴影
- 由版本问题引发的自我总结
- classpath:/ 与 classpath*:/ 引发的问题总结
- ios获取局域网ip
- 基于桶式排序的基数排序Java实现
- 最新的Myeclipse 8.6注册码:
- Oracle之函数
- html5文件上传插件,附带使用说明
- 绘制阴影引发的 iOS 绘图性能问题总结
- Linux基本命令之date命令
- Android中dip、dp、sp、pt和px的区别
- C++_模板
- 空间关系描述
- [搜索] hdu 4016 Magic Bitwise And Operation
- C#设置WinForm快捷键
- Hbase总结(三)-Hbase与Hive的区别与联系
- 目录范例(中)