티스토리 뷰

UIViewPropertyAnimator 변수를 만듭니다.

var animator: UIViewPropertyAnimator? = nil

 

 

애니메이션을 정의합니다.

animator = UIViewPropertyAnimator(duration: duration, curve: .linear) {
    self.aView.frame = CGRect(x: 0, y: 0, width: 60, height: 60)
    self.aView.backgroundColor = .systemRed
}

animator?.addCompletion { position in
    position.printPosition(#function)
}
animator?.startAnimation()

addCompletion 을 이용해서 완료 후 동작을 추가할 수 있습니다.

startAnimation 을 이용해서 애니메이션을 실행합니다.

 

애니메이션이 동작하는 중에 애니메이터를 다시 선언하면 애니메이션이 이어서 재생됩니다.

 

 

 

애니메이션을 추가할 수 있습니다.

animator?.addAnimations {
    self.aView.frame = CGRect(origin: self.aView.frame.origin, size: CGSize(width: 90, height: 90))
}

addAnimations를 이용해서 애니메이션을 추가합니다.

 

애니메이션을 되돌릴 수 있습니다.

animator?.isReversed = true

 

 

 

애니메이션을 중단할 수 있습니다.

animator?.pauseAnimation()

 

애니메이션을 계속합니다.

animator?.continueAnimation(withTimingParameters: nil, durationFactor: 3)

Timing파라미터와 시간을 설정할 수 있습니다.

 

애니메이션을 멈춥니다.

animator?.stopAnimation(true)
animator?.stopAnimation(false)

true 일 때는 애니메이션 state가 inactive 됩니다.

 

false 일 때는 애니메이션 state가 stopped 됩니다.

 

 

애니메이션을 종료합니다.

animator?.finishAnimation(at: .start)
animator?.finishAnimation(at: .current)
animator?.finishAnimation(at: .end)

UIViewAnimatingPosition을 사용해서 종료합니다.

 

 

animator?.pausesOnCompletion = true

기본값은 NO입니다. 애니메이터가 완료 시 .inactive 상태로 전환하지 않고 일시 중지할 수 있는 기능을 제공합니다.

(addCompletion 이 불리지 않습니다.)

 

 

 

주의사항 / crash 발생하는 경우

pausesOnCompletion = true 이후에 animator를 release 하는 경우

Thread 1: "It is an error to release a property animator that has paused on completion. Property animators must either finish animating or be explicitly stopped and finished before they can be released.”

완료 시 일시 중지된 property animator를 해제하는 것은 오류입니다. property animator를 해제하려면 먼저 애니메이션을 완료(finished)하거나 명시적으로 중지(stopped)하고 완료해야 합니다.

pauseAnimation() 이후에 animator를 release 하는 경우

stopAnimation(false) 이후에 animator를 release 하는 경우

Thread 1: "It is an error to release a paused or stopped property animator. Property animators must either finish animating or be explicitly stopped and finished before they can be released.”

일시 중지되거나 중지된 property animator를 해제하는 것은 오류입니다. property animator는 애니메이션을 끝내(finished)거나 명시적으로 중지(stopped)하고 끝내야 릴리스할 수 있습니다.

animator가 runnging 중일 때, finishAnimation(at: ) 호출 하는 경우

Thread 1: "finishAnimationAtPosition: should only be called on a stopped animator!”

finishAnimationAtPosition: 는 중지(stopped)된 animator에서만 호출되어야 합니다.

댓글
공지사항