我知道我可以通过修改 bounds
和 transform
属性来更改 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/