我正在开发一个UIViews
上约有ViewController
项目的项目。
部分UIView
包含一些处理器密集型CG
图纸,在加载时已完成透明度,而其他UIView
则为动画效果。特别是,以下旋转动画连续运行。 (如果我仔细观察,动画看起来并不完全平滑。)
我正在测试的设备正在预热,它不热,但变得非常温暖。我担心我的处理器超载了。
问题:
是否有更有效的方法来完成以下动画,这些动画使用资源消耗较少的方法连续运行,并防止设备升温?
Xcode乐器:
负载(最大): CPU :56% - 内存:29MB
运行时(最大值): CPU :1% - 内存:29MB
func rotateForward() {
UIView.animateWithDuration(2, delay: 0, options: .CurveLinear, animations: { () -> Void in
self.viewA.transform = CGAffineTransformRotate(self.viewA.transform, CGFloat(M_PI_2))
self.viewB.transform = CGAffineTransformRotate(self.viewB.transform, CGFloat(M_PI_2))
self.viewC.transform = CGAffineTransformRotate(self.viewC.transform, CGFloat(M_PI_2))
self.viewD.transform = CGAffineTransformRotate(self.viewD.transform, CGFloat(M_PI_2))
}) { (finished) -> Void in
self.rotateForward()
}
}
func rotateBack() {
UIView.animateWithDuration(2, delay: 0, options: .CurveLinear, animations: { () -> Void in
self.viewW.transform = CGAffineTransformRotate(self.viewW.transform, -CGFloat(M_PI_2))
self.viewX.transform = CGAffineTransformRotate(self.viewX.transform, -CGFloat(M_PI_2))
self.viewY.transform = CGAffineTransformRotate(self.viewY.transform, -CGFloat(M_PI_2))
self.viewZ.transform = CGAffineTransformRotate(self.viewZ.transform, -CGFloat(M_PI_2))
}) { (finished) -> Void in
self.rotateBack()
}
}
答案 0 :(得分:2)
您可以使用GPU执行这些动画,而不是使用CPU来运行这些动画。 您可以使用此协议使视图向前旋转。尝试将视图子类化以实现此协议并尝试它。
protocol Rotate{ }
extension Rotate where Self: UIView {
func rotate() {
let animation = CABasicAnimation(keyPath: "transform.rotation")
animation.duration = 2
animation.repeatCount = Float.infinity
animation.fromValue = 0.0
animation.toValue = Float(M_PI * 2.0)
layer.addAnimation(animation, forKey: "position")
}
}