2016-09-06 33 views
0

我正在製作一個項目,其中約有在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() 
     } 
    } 

回答

2

除了使用CPU來運行這些動畫,您可以使用GPU來執行它們。 您可以使用此協議使視圖向前旋轉。嘗試對視圖進行子類化以實現此協議並嘗試一下。

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") 
    } 
} 
+0

謝謝,這似乎旋轉它。 – user4806509

+1

現在是否使用較少的CPU?與直接使用CPU的View動畫不同,Layer動畫直接使用GPU執行動畫。 – unniverzal