优化多个连续动画,加热设备

时间:2016-09-06 22:55:37

标签: ios swift animation optimization uiview

我正在开发一个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()
        }
    }

1 个答案:

答案 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")
    }
}