ios - CoreAnimation : To resize a instance of CALayer, 哪个性能更好?变换还是界限?

标签 ios cocoa core-animation

我知道我可以通过修改 boundstransform 属性来更改 CALayer 实例的大小。

但是,哪个性能更好呢?或者如何选择合适的属性使用有什么原则?

最佳答案

它们在与 CALayer 交互的方式上是两个不同的属性,所以我不认为它们可以互换。

当您更改 CALayer 上的变换时,您是在获取该层的基本内容和几何形状,并以可以对其进行缩放、旋转、应用透视或其他 3-D 效果的方式对其进行变换。这些都是硬件加速的,因为您有效地将 OpenGL (ES) 变换矩阵应用于 CALayer 的二维矩形纹理。请注意,应用转换不会导致 CALayer 内容重新渲染,因此如果您放大或缩小图层,最终可能会出现模糊的图形和文本。

如果您更改 CALayer 的边界,您将通过直接调整其几何形状来使图层本身变形。默认情况下,这是硬件加速的。但是,如果您将 CALayer 的 needsDisplayOnBoundsChange 属性设置为 YES,这最终可能会更加昂贵。在这种情况下,如果您更改图层的边界,该图层将以新的大小重新渲染,这可能是一个缓慢的操作。如果您希望在调整大小操作结束时有清晰的图形,您可以使用此选项,这是转换无法提供的。

总而言之,虽然默认情况下缩放变换和边界变化在性能方面可能大致相同,但如果设置正确,后者可能会慢得多。一般来说,我的建议是,如果您希望移动图层或调整图层大小并让它停留在那里,则直接操纵图层的几何形状,并为快速动画(如反弹、摇动或弹出)或应用程序保留变换更高级的操作,如透视效果。

关于ios - CoreAnimation : To resize a instance of CALayer, 哪个性能更好?变换还是界限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8381365/

相关文章:

ios - 是否可以从 CLI 命令应用 "Update to recommended settings"?

objective-c - 轮询网络以确定网络是否可访问?

objective-c - UIkit 动画和核心动画

ios - CALayer 在 iPhone 旋转时自动旋转

database - 学习 Cocoa 数据库开发的推荐资源?

opengl-es - 如何在iPhone 6 Plus上完美绘制Pixel?

ios - objective-c 串联键

ios - 为什么应用自定义推送动画时键盘会隐藏?

macos - 使用 IOKit 与 USB 设备通信

objective-c - 在内存中保存长字符串的最佳方法是什么? ( cocoa )