관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] 1. UIViewPropertyAnimator, AnimationStates - 개념 본문

iOS 응용 (swift)

[iOS - swift] 1. UIViewPropertyAnimator, AnimationStates - 개념

jake-kim 2022. 3. 27. 22:46

1. UIViewPropertyAnimator, AnimationStates - 개념

2. UIViewPropertyAnimator, AnimationStates - fractionComplete, interactive animation (상호작용 애니메이션)

UIViewPropertyAnimator

  • UIView.animate와 다르게 시작, 종료, 일시중지, 정지, 완료가 가능
  • 애니메이션 진행률과 같은 현재 상태에 대한 값도 알 수 있는 장점이 존재
  • iOS 10+
  • "프로퍼티 애니메이터"로 이름이 지어진 이유: 시작, 중지, 종료등을 컨트롤 할 수 있는 애니메이션 상태를 갖고 있기 때문

애니메이션 상태

  • 새로 생성된 인스턴스는 inactive상태에서 시작
  • 애니메이션을 마친 인스턴스도 inactive 상태로 돌아감
  • 메서드를 호출하면 active 상태로 변경
  • 중지하면 stopped 상태로 변경

https://developer.apple.com/documentation/uikit/uiviewanimating

UIViewProperyAnimator 사용 방법

  • 프로퍼티 선언 - 언제든지 취소하고 재개, 일시중지 할 수 있도록 전역에 선언
// 1. 프로퍼티 선언
var animator: UIViewPropertyAnimator?
  • 프로퍼티 초기화
// 2. 프러퍼티 초기화
self.animator = UIViewPropertyAnimator(
  duration: 3.0,
  curve: .easeOut,
  animations: { self.myView.transform = .init(scaleX: 2.0, y: 1.3) }
)
  • 애니메이션 completion 지정
// 3. completion
self.animator?.addCompletion { position in
  switch position {
  case .start:
    print("start")
  case .end:
    print("end")
  case .current:
    print("current")
  @unknown default:
    fatalError()
  }
}
  • 프로퍼티에 접근해서 애니메이션 컨트롤
@objc private func didTapStartButton() {
  // 애니메이션 시작 or 재개
  self.animator?.startAnimation()
}
@objc private func didTapPauseButton() {
  self.animator?.pauseAnimation()
}
@objc private func didTapStopButton() {
  self.animator?.stopAnimation(true)
}
@objc private func didTapAddButton() {
  self.animator?.addAnimations {
    self.myView.transform = .init(scaleX: 0.5, y: 0.5)
  }
}

* 전체 코드: https://github.com/JK0369/ExPropertyAnimator

 

* 참고

https://developer.apple.com/documentation/uikit/uiviewanimating

Comments