所以我现在有this动画饼图。它可以指示例如随着时间的推移(类似于UIProgressView
)。
由于遗留原因,我仍在使用一个可以触发大约的计时器。每秒钟增加progress
。现在应该可以摆脱这个计时器并设置饼图动画的总持续时间,例如到1/2小时,而不是让计时器点火30 * 60次并开始尽可能多的短增量动画。
所以我的问题是这样的:有没有什么好的理由反对在iOS中使用如此长的(比如长达1/2小时)动画?在饼图的例子中不超过约。即使超过半小时也需要360帧。
答案 0 :(得分:2)
有很好的理由反对很长的动画:记忆
CoreAnimation
会为每一帧创建presentationLayer
(例如参见your other question),并且(至少在iOS 7.1之前)它会在您添加动画时在后台分配和初始化它们到层。
帧速率取决于设备,而不取决于动画属性的变化幅度;此外,似乎没有办法在iOS上调整CoreAnimation
的帧速率(在OSX NSAnimation
上有frameRate
属性),所以如果你动画progress
(但它与任何属性都是一样的)并设置30分钟的持续时间,你最终会浪费很多的内存。
有些数字。我在CABasicAnimation
上安排了一些路径为progress
的{{1}},并在DZRoundProgressLayer
中添加了一些记录。这表明在模拟器上,每秒动画需要大约50个阴影副本(帧)
这意味着将创建 90K 卷影副本30分钟:在动画开始后的几秒钟内,-initWithLayer:
仍在分配前几千个副本。将一些数据有效负载添加到CoreAnimation
的实例变量中显示内存使用量在第一秒内增加了几MB(然后一些内存管理接管了无约束的分配,可能会释放旧的副本)。
这是一个坏主意吗?它是浪费资源,内存和CPU,即使你的图层占用内存中的几个字节,考虑到每帧饼图区域的变化太小而不能被注意到。设置DZRoundProgressLayer
或KVO并不需要多行代码,因此可能需要更改方法。