Cocoa Touch에서 애니메이션 구현하는 방법을 정리해 본다.
UIView.animate를 사용하여 애니메이션을 지정하기
UIView.animate
에는 몇 가지 오버로드들이 있지만 하나의 애니메이션에 대해 섬세하게 지정할 수 있는 메소드를 기준으로 다음과 같이 사용할 수 있다.
// Swift
UIView.animate(withDuration: /* 총 소요시간 */,
delay: /* 애니메이션 시작 전 뜸 들이는 시간 */,
options: /* 애니메이션이 실행되는 동안 속도 변화 및 각종 옵션 */,
animations: {
/* 애니메이션 끝에 가서 나타날 효과를 기술한다. */
/* 그러면 애니메이션을 통해 서서히 여기서 기술한대로 각종 요소들이 변할 것이다. */
},
completion: { finished in
/* 애니메이션이 끝난 뒤 수행할 작업을 기술한다. */
/* 레퍼런스에 따르면 이 클로저는 Bool형 변수를 하나 받게 되는데, */
/* 진짜로 애니메이션이 다 끝나서 호출되는 거라면 true가 전달된다. */
/* 그냥 한 번 호출되었다면 false이다. */
})
// Objective-C
[UIView animateWithDuration: /* 총 소요시간 */
delay: /* 애니메이션 시작 전 뜸 들이는 시간 */
options: /* 애니메이션이 실행되는 동안 속도 변화 및 각종 옵션 */
animations:^{
/* 애니메이션 끝에 가서 나타날 효과를 기술한다. */
/* 그러면 애니메이션을 통해 서서히 여기서 기술한대로 각종 요소들이 변할 것이다. */
}
completion:^(bool finished) {
/* 애니메이션이 끝난 뒤 수행할 작업을 기술한다. */
/* 레퍼런스에 따르면 이 클로저는 Bool형 변수를 하나 받게 되는데, */
/* 진짜로 애니메이션이 다 끝나서 호출되는 거라면 true가 전달된다. */
/* 그냥 한 번 호출되었다면 false이다. */
}];
UIViewPropertyAnimator를 사용하여 애니메이션을 지정하기
UIViewPropertyAnimator
는 iOS 10 이후부터 도입된 클래스이다.
var animator: UIViewPropertyAnimator!
// animator 인스턴스를 초기화할 수 있는 메소드 안에서 다음과 같은 내용을 작성한다.
// 생성자 한 줄에서 많은 요소들을 한 번에 초기화 할 수도 있지만,
// 몇 줄에 걸쳐서 하나씩 지정해 보기 위해 가장 간단한 생성자를 사용한다.
// duration은 생성자에서만 지정 가능하며 이후 프로퍼티에서는 읽기 전용이므로 변경 불가하다.
// curve도 생성자에서만 지정 가능하다.
// animations는 나중에 추가할 수 있으므로 생성자에서는 nil을 지정한다.
animator = UIViewPropertyAnimator(duration: /* 총 소요시간 */,
curve: /* 애니메이션이 실행되는 동안 속도 변화 및 각종 옵션 */,
animations:nil)
animator.startAnimation(afterDelay: /* 애니메이션 시작 전 뜸 들이는 시간 */)
animator.addAnimations({
/* 애니메이션 끝에 가서 나타날 효과를 기술한다. */
/* 그러면 애니메이션을 통해 서서히 여기서 기술한대로 각종 요소들이 변할 것이다. */
})
animator.addCompletion({ position in
/* 애니메이션이 끝난 뒤 수행할 작업을 기술한다. */
/* 레퍼런스에 따르면 이 클로저는 UIViewAnimatingPosition형 변수를 하나 받게 되는데, */
/* 이름 그대로 애니메이션의 주기에 따라 .start, .current, .end 중 하나이다. */
})