2016-09-06 4 views
0

ViewController에 약 16,UIViews의 프로젝트를 진행 중입니다. 다른 UIView은 애니메이션 동안 장치를 가열하는 여러 연속 애니메이션 최적화

UIView의 일부

는,로드시에 실시 투명성 일부 프로세서 집약적 CG 도면이 포함되어 있습니다. 특히 다음 회전 애니메이션이 계속 실행됩니다. (매우 자세히 보면 애니메이션이 부드럽게 보이지 않습니다.)

내가 테스트하고있는 장치는 예열 중이며 뜨겁지는 않지만 매우 따뜻합니다. 나는 프로세서에 오버로드가 걱정된다.

질문 :

지속적으로 적은 리소스를 배가하고 가열에서 장치를 방지하는 방법을 사용하여 실행 아래의 애니메이션을 완료하는 데 더 효율적인 방법이 있나요?

엑스 코드 악기 : 부하

(최대)CPU : 56 % - 메모리 : 29메가바이트

(최대) 러닝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 애니메이션과 달리 GPU를 직접 사용하여 애니메이션을 수행합니다. – unniverzal