ios - 混合 V.S.离屏渲染,哪个对 Core Animation 性能更差?

标签 ios core-animation

混合和离屏渲染在 Core Animation 中都是昂贵的。

可以在 Instruments 的 Core Animation instrument 中看到它们,带有调试选项: Instruments

这是我的案例:

在 UIImageView 上显示 50x50 PNG 图像。我想用 6 点取芯器半径对图像进行四舍五入。第一种方法是设置 UIImageView.layer 的 cornerRadius 和 masksToBounds,这会导致离屏渲染。第二种方法是制作带有透明角的 PNG 图像副本,这会导致混合(因为 alpha channel )。

我都试过了,但我看不出明显的性能差异。但是,我仍然想知道理论上和最佳实践中哪个更差。

非常感谢!

最佳答案

好吧,简短的回答,混合必须以正确显示透明角像素的方式发生。但是,如果您希望生成的 View 也以某种方式进行动画处理(请记住,滚动是最常见的动画类型),这通常只是一个问题。此外,当我的 View 变得复杂时,我能够重新创建“cornerRadius”会在旧设备(在我的例子中是 iPhone 3G)上导致渲染错误的情况。对于确实需要高性能动画的情况,这里是我遵循的建议。

首先,如果您只需要圆角具有单条曲线的资源(不同的比例都可以,只要所需的曲率相同),请以这种方式保存它们以避免额外计算“cornerRadius”运行时。

其次,不要在不需要的地方使用透明度(例如,当背景实际上是纯色时),并始终为“不透明”属性指定正确的值,以帮助系统更有效地计算绘图.

第三,找到最小化透明 View 大小的方法。例如,对于带有透明元素(例如圆角)的大边框 View ,考虑将 View 拆分为 3(顶部、中间、底部)或 7(4 个角、顶部中间、中间、底部中间)部分,保留透明部分尽可能小,并将矩形部分标记为不透明,具有纯色背景。

第四,如果您在 ScrollView 中绘制大量文本(例如高度自定义的 UITableViewCell),请考虑使用“drawRect:”方法更有效地呈现这些部分。继续对图像元素使用 subview ,以便在预绘制( subview )和“即时”绘制(drawRect:)之间的整体 View 之间分配渲染时间。显然,实验(滚动时每秒帧数)可能表明违反此“经验法则”可能最适合您的特定 View 。

最后,确保您有充足的时间使用分析工具(尤其是 CoreAnimation)进行试验是关键。我发现使用您想要定位的最慢的设备最容易看到改进,而且在较新的设备上结果看起来很棒。

关于ios - 混合 V.S.离屏渲染,哪个对 Core Animation 性能更差?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7852592/

相关文章:

ios - 图层 zPosition 没有效果

ios - iOS上的Cordova Media

ios - NSArray mutableCopy 创建新数组但仍指向旧内容

ios - Tesseract iOS 相机精度低

iphone - 恢复应用内购买时没有出现 'buy' 提示?是否可以?

ios - animateWithDuration 无法识别?

iphone - "-[UIApplication beginIgnoringInteractionEvents] overflow. Ignoring."是什么?

iphone - 什么触发了 iOS 中的离屏渲染、混合和 layoutSubviews?

objective-c - 多行 CATextLayer

ios - 当有很多 UIView 动画与使用阴影的 UILabels 一起运行并且我按下主页按钮时,设备会卡住