iOS中的长时间动画(长达1/2小时)



现在这个动画饼状图开始工作了。例如,它可以指示进度随时间的变化(类似于UIProgressView)。

出于遗留原因,我仍然使用它与大约触发的计时器。增加progress。现在应该可以摆脱这个计时器,并将饼动画的总持续时间设置为1/2小时,而不是让计时器触发30 * 60次并开始许多短的增量动画。

所以我的问题是:是否有任何理由反对在iOS中使用如此长的动画(例如长达1/2小时)?在饼状图的例子中,不超过大约。即使在半小时内也需要360帧。

反对很长的动画有一个很好的理由:内存。
CoreAnimation将为每一帧创建一个presentationLayer(参见例如你的其他问题),并且(至少到iOS 7.1)它将在你将动画添加到图层的那一刻在后台分配和初始化它们。

帧率取决于设备,而不是取决于动画属性变化的幅度;此外,似乎没有办法在iOS上调整CoreAnimation的帧率(而在OSX上NSAnimationframeRate属性),所以如果你动画progress(但它与任何属性都是一样的)并设置30分钟的持续时间,你将以结束大量的内存浪费。

一些数字。我在DZRoundProgressLayer上安排了一些CABasicAnimation的路径progress,并在-initWithLayer:中添加了一些日志记录。这表明,在模拟器上,每秒动画大约需要50个阴影拷贝(帧)。这意味着将在30分钟内创建90K影子副本:在动画开始后的几秒钟内,CoreAnimation仍在分配前数千个副本。将一些数据负载添加到DZRoundProgressLayer的实例变量中,显示内存使用量在最初几秒钟内增加了几个MB(然后一些内存管理接管了未受约束的分配,可能释放了旧副本)。

这是个坏主意吗?这是对资源、内存和CPU的浪费,即使你的层占用了内存中的几个字节,考虑到每帧饼形区域的变化太小而无法被注意到。设置NSTimer或KVO不需要很多行代码,所以改变方法可能是值得的。

最新更新