CABasicAnimation活动指示器导致后台处理时间延长300%

时间:2016-06-27 03:07:29

标签: ios swift cabasicanimation xcode-instruments

我正在为自定义活动指示器执行一个非常简单的动画,如下所示:

var iconView: UIImageView!

let animation = CABasicAnimation(keyPath: "transform.rotation")
animation.fromValue = 0
animation.toValue = 2 * M_PI
animation.repeatCount = .infinity
animation.duration = 1.25
iconView.layer.addAnimation(animation, forKey: animation.keyPath)

iconView只显示一个96x96像素的图像,该图像随着显示的动画代码一起旋转。

这很好用,但是当使用动画时,我的后台进程会花费超过310%的时间!后台进程在NSOperationQueue中的NSBlockOperation中完成:

public var backgroundQueue = NSOperationQueue()
backgroundQueue.qualityOfService = .UserInitiated

let operation1 = NSBlockOperation()
operation1.queuePriority = NSOperationQueuePriority.VeryHigh
operation1.qualityOfService = .UserInitiated

在以下时间乐器跟踪存档中,第一个跟踪是使用动画完成的,大约需要1分24秒。与第二条跟踪的唯一区别是我禁用了上面的CABasicAnimation代码,同样的处理需要27秒!

Time Instruments Traces

我检查了个人资料,但无法找到任何理由,为什么需要这么长时间。我认为可能是我使用UIVisualEffectView视图作为自定义活动指示器的背景,但是禁用它没有任何明显的改进(对于上面的跟踪禁用)。任何见解或建议将不胜感激。

更新:使用UIActivityIndi​​catorView需要更合理的29秒(相比之下没有任何指标的27)。

编辑:这是没有动画的痕迹: Time Profile without animation

带动画的痕迹: Time Profile with animation

0 个答案:

没有答案