假设我想向视图添加50张图片以便对它们进行动画处理。并且假设我计划使用核心动画(例如CABasicAnimation)而不是“UIView”动画。
在实现时,将子视图或子层添加50个哪种方式更好?有区别吗?
谢谢。
在实现时,将子视图或子层添加50个哪种方式更好?有区别吗?
谢谢。
如我在这里所述,我在动画中使用过UIView和CALayer,并发现它们之间的性能差异可以忽略不计。UIView是层的轻量级包装器,而且任何基于层的动画都可以很容易地应用于UIView的后备层。
我在直接使用CALayer的情况下是想创建跨平台(Mac/iOS)UI元素,因为CALayer在两个平台上的实现几乎完全相同(不像NSView和UIView有明显不同)。CALayer默认没有触摸处理例程,但如果需要,您可以添加该功能。
还有一些边缘情况,您可能希望直接使用层,比如当尝试进行有限的3D图层操作时(比如CoverFlow效果),或者当使用CAReplicatorLayer来产生粒子效果时。
UIViews 包含子层,因此它们的权重较大,并且包含您可能不需要的所有50个图像的事件和触摸处理程序/变量等内容。因此,对于每个图像使用层可能会比使用视图略微更高效并且使用更少的内存。
这么少的图片差别可以忽略不计,使用最方便的即可。
我还没有做过动画(但是:-),但我记得读到的东西建议创建一个包含所有50个平铺图像的图像,然后在绘制时只需偏移至正确的图像。这样,您只需要一个层或UIImage或其他内容来显示它。我不知道速度如何,但我猜它会节省内存,并且可能更容易管理和编码。
+setCompletionBlock:
来获取类似的块完成回调,该方法将在该事务中包装的所有动画完成时执行一个块。如果您可能想要这样做,这只是需要考虑的一些事情。 - Brad Larson