2017-10-08 10 views
0

나는 로고 imager를 애니메이션에 적용했습니다. animated 제약 조건은 width와 height입니다. 220.0의 원래 상태에서 240.0으로 (잘 작동합니다) 이동 한 다음 220.0으로 돌아가고 싶지만 애니메이션은 건너 뛰고 이미지는 0.1 초에서 220.0으로 바로 돌아갑니다.Swift가 하나의 애니메이션을 건너 뜁니다 (UIView.animate)

는 여기에 내가 얻을 수있는 모든 도움에 미리

func animate() { 

     self.imageHeightConstraint.constant = 240.0 
     self.imageWidthConstraint.constant = 240.0 

     UIView.animate(withDuration: 1.0, 
         delay:0.0, 
         options: .curveEaseIn, 
         animations:{ 

         self.logoImage.layoutIfNeeded() 

     }, completion: { (finished: Bool) -> Void in 

      self.imageHeightConstraint.constant = 220.0 
      self.imageWidthConstraint.constant = 220.0 



      UIView.animate(withDuration: 2.0, 
          delay:0.0, 
          options: .curveEaseIn, 
          animations: { 

       self.logoImage.layoutIfNeeded() 

      }) 

     }) 

    } 

감사 애니메이션의 코드입니다! ;-)

답변

1

상수를 다시 설정하기 전에 완료 블록 내에서 self.logoImage.setNeedsLayout()으로 전화해야합니다. 이것은 수신기의 현재 레이아웃을 무효화하고 다음 업데이트 사이클 동안 레이아웃 업데이트를 트리거해야하기 때문에 발생합니다.

대신이 코드를 시도하고 당신을 위해 작동합니다

func animate() { 
    self.imageHeightConstraint.constant = 240.0 
    self.imageWidthConstraint.constant = 240.0 
    UIView.animate(withDuration: 1.0, 
        delay:0.0, 
        options: .curveEaseIn, 
        animations:{ 

        self.logoImage.layoutIfNeeded() 

    }, completion: { (finished: Bool) -> Void in 
     self.logoImage.setNeedsLayout() 
     self.imageHeightConstraint.constant = 220.0 
     self.imageWidthConstraint.constant = 220.0 

     UIView.animate(withDuration: 2.0, 
         delay:0.0, 
         options: .curveEaseIn, 
         animations: { 

      self.logoImage.layoutIfNeeded() 

     }) 
    }) 
} 
+0

이 근무! 정말 고맙습니다 ;) – Julien