Skip to content

Latest commit

 

History

History
106 lines (80 loc) · 2.46 KB

03차-발표자료.md

File metadata and controls

106 lines (80 loc) · 2.46 KB

애니메이션 동작

  • 가끔씩 애니메이션을 주다보면 원하는 기대와 다르게 동작하지 않을 때가 있어서 경험을 바탕으로 정리

매개변수 기능

UIView.animate

  • 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로 늘어나는 애니메이션