- 가끔씩 애니메이션을 주다보면 원하는 기대와 다르게 동작하지 않을 때가 있어서 경험을 바탕으로 정리
- withDuration
- 애니메이션동작이 이뤄지는 시간
- delay
- 애니메이션동작이 시작되기전까지 걸리는 시간
- usingSpringWithDamping
- 0부터 1사이의 값
- 통통 튀는 효과
- 0에 가까울수록 심하게 진동
- initialSpringVelocity
- 0부터 1사이의 값
- 상대속도
- 0에 가까울수록 빨라짐
- options
- 애니메이션 Flow
- curveEaseOut, allowUserInteraction, repeat 등등...
- animations
- 효과를 주고싶은 뷰를 구현하는 부분
- layoutIfNeeded
- View레이아웃 즉시 업데이트
- 동기호출
- setNeedsLayout
- 하위View의 레이아웃 조정
- 다음 업데이트 주기를 기다림
- 비동기
- 설정시 변경사항이 즉시 반영되기때문에 애니메이션시 효과를 볼 수 없음
- layoutSubviews
- Subview들을 배치
- 직접 호출하면안됌
- 강제 업데이트시 setNeedsLayout
- 즉시 업데이트시 layoutIfNeeded
- setNeedsDisplay
- View의 내용이나 모양이 변경된 경우에만 View를 다시 그림
- 다음 드로잉 사이클 때 변경해줌
- viewDidLoad
- viewWillAppear
- ... Constraints Update ...
- ... Layout Update ...
- ... Draw ...
- viewDidAppear
- viewDidLoad에 애니메이션
- 애니메이션이 끝난 상태의 뷰 보임
- viewWillAppear에 애니메이션
- 애니메이션이 뷰가 보이면서 시작됨
- 이상적
- viewDidAppear에 애니메이션
- 애니메이션이 뷰가 다 뜨고 시작됨
- 살짝 느리게 느껴짐
transform을 이용한 애니메이션
UIView.animate(withDuration: 0.3) {
// 원하는 뷰에 애니메이션 구현
}
constant을 이용한 애니메이션
self.viewBottomLayout.constant = 0
UIView.animate(withDuration: 0.3) {
self.view.layoutIfNeeded()
}
- constant 수정뒤에layoutIfNeeded 호출
- 아무변화가 없음
- layoutIfNeeded 호출뒤에 constant 수정
- 변경 후의 constant로 효과 없는 애니메이션
- constant 수정 뒤에 UIView.animate를 이용한 layoutIfNeeded 호출
- 변경 후의 constant로 늘어나는 애니메이션