iOS animation 메소드
- iOS 2
- beginAnimations, commitAnimations
- 현재는 deprecated 되었다.
- iOS 4
- closure 형태인 animate 메소드
- 현재 주로 사용되고 있는 메소드
- iOS 10
- UIViewPropertyAnimation
- 애플에서 권장하는 방법
UIView Animate
특징
- Closure 기반
- Animation이 동작하는 동안 User Interaction은 일시적으로 disabled 된다.
- Animation이 가능한 속성
- frame, bounds, transform, alpha, backgroundColor
UIView의 animation 함수
- UIView.animate(withDuration:animations:)
class func animate(
withDuration duration: TimeInterval,
animations: @escaping() -> Void
)
- 한 가지 이상의 뷰들을 특정 시간동안 변화시킬 수 있다.
- duration
- 애니메이션이 지속되는 시간이다.
- TimeInterval 타입이다.
- 만약 음수나 0을 지속 시간에 넣어주면 애니메이션이 없이 뷰가 변화할 것이다.
- animations
- 뷰들에게 어떤 변화를 줄 것인지에 대한 정의를 하는 곳이다.
- 이 곳은 어떤 파라미터도 받지않고 리턴값 조차 존재하지 않는다.
- animate(withDuration:animations:completion:)
class func animate(
withDuration duration: Timeinterval,
animations: @escpaing () -> Void,
completion: ((Bool) -> Void)? = nil
)
- 기존 값들이 completion만 추가된 형태이다.
- completion에는 애니메이션이 완료된 후 동작할 내용을 담아주면 된다.
간단한 배경 화면 바꾸는 코드
func activateAnimation() {
backgroundColor = .systemBackground
UIView.animate(
withDuration: 0.5,
animations: {
backgroundColor = .systemPurple
}
)
}
애니메이션 해제 방법
- layer에 접근하여 animation을 remove 시켜주면 애니메이션을 해제할 수 있다.
object.layer.removeAllAnimations()
애니메이션 체인
- 애니메이션 complete 안에 다음 애니메이션을 호출하여 애니메이션을 체인 방식으로 실행 시킬 수 있다.
애니메이션 options
- 옵션은 하나를 줄 수도 있고, [] 를 사용하여 여러개를 줄 수 있다.
- 종류
- curveEaseInOut: 천천히 시작했다가 점점 빨라지다가 다시 천천히 종료되는 curve(기본)
제약 조건 애니메이션
- 애니메이션 효과에 constant값을 변경하는 효과를 넣을때는 layoutIfNeeded가 필요하다.
UIView.animate(withDuration: 0.3) {
self.bugView.constant = 100.0
}
- 위와 같이 애니메이션을 주면 뷰의 크기만 변경이 된다.
UIView.animate(withDuration: 0.3) {
self.bugView.constant = 100.0
}
self.bugView.constant = 100.0
UIView.animate(withDuration: 0.3) {
self.view.layoutIfNeeded()
}