2015-01-30 5 views
0

초기 및 모달의 두 개의보기 컨트롤러가 있습니다. 초기 컨트롤러에는 애니메이션이 있고 모달 컨트롤러에는 애니메이션이 있습니다. 각 애니메이션에는 완성 블록이 있습니다. 빌드 구성 Run-> Build 구성을 Release로 설정했습니다. 앱을 실행하고 모달 컨트롤러로 이동하여 애니메이션을 실행합니다. 모달 컨트롤러 (모달 컨트롤러에서) 후에 모달 컨트롤러의 완료 블록 대신 초기 컨트롤러에서 애니메이션 완료 블록이 호출됩니다. 누구도 그걸 경험하고 있니? 어떤 제안?릴리스 빌드 설정의 신속한 애니메이션 완성 버그

Sample project here (제품 -> 계획 -> 편집 방식 -> 실행이 -> 구성 빌드 : 릴리스) 그것은 확실히 최적화 된 버그

답변

1

.

빠른 해결 방법은 completions: 클로저를 @objc_block으로 캐스팅하는 것입니다.

의 ViewController :

UIView.animateWithDuration(0.3, 
     delay: 0.0, 
     options: UIViewAnimationOptions.CurveEaseInOut, 
     animations: {() -> Void in 
      self.rectangleView.alpha = 1.0 
     }, 
     completion: { (complete) -> Void in 
      println("111 Hello ViewController 1") 
     } as @objc_block (Bool) -> Void 
     // ^^^^^^^^^^^^^^^^^^^^^^^^^^ 
    ) 

ViewController2 :

UIView.animateKeyframesWithDuration(duration, 
     delay: 0.0, 
     options: UIViewKeyframeAnimationOptions.CalculationModeLinear, 
     animations: {() -> Void in 
      UIView.addKeyframeWithRelativeStartTime(0.0, 
       relativeDuration: (duration/2), 
       animations: {() -> Void in 
        self.rectangleView.alpha = 0.1 
       } 
      ) 
      UIView.addKeyframeWithRelativeStartTime(
       (duration/2), 
       relativeDuration: (duration/2), 
       animations: {() -> Void in 
        self.rectangleView.backgroundColor = UIColor.blueColor() 
       } 
      ) 
     }, 
     completion: { (complete) -> Void in 
      println("Hello ViewController 2") 
     } as @objc_block (Bool) -> Void 
     // ^^^^^^^^^^^^^^^^^^^^^^^^^^ 
    )