Project 13 - Animation

DaY·2021년 4월 13일
1

iOS

목록 보기
33/52
post-thumbnail

CAKeyframeAnimation

특정 시간(키 프레임)에 객체가 가져야 할 값을 지정하고, 그 사이의 값을 보간(interpolation)하는 방법으로 구현

예를 들어, 공이 튀어올랐을 때를 가정하면, 공 위치 초기값, 튀어 오른 최댓값, 다시 바닥에 떨어졌을 때의 값만 지정하고 나머지 값은 자동으로 계산되도록 해준다.

let keyFrameAnimation = CAKeyframeAnimation(keyPath: "bounds")

keyFrameAnimation.delegate = self
keyFrameAnimation.duration = 1
keyFrameAnimation.timingFunctions = [CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut), CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeOut)]

timingFunctions
각 키 프레임마다 애니메이션의 흐름을 조정할 수 있도록 timingFunctions 프로퍼티 제공 (키 프레임마다 각각의 timingFunction 필요)

let initialBounds = NSValue(cgRect: mask.bounds)
let secondBounds = NSValue(cgRect: CGRect(x: 0, y: 0, width: 80, height: 60))
let finalBounds = NSValue(cgRect: CGRect(x: 0, y: 0, width: 2000, height: 2000))
        
keyFrameAnimation.values = [initialBounds, secondBounds, finalBounds]
keyFrameAnimation.keyTimes = [0, 0.3, 1]
mask.add(keyFrameAnimation, forKey: "bounds")

keyTimes 배열과 values 배열은 1:1 대응이 되어야 한다. 또한 keyTimes의 시간축은 0.0 ~ 1.0 값이다.

CAAnimationDelegate

애니메이션이 종료되면 실행할 액션 지정

func animationDidStop(_ anim: CAAnimation, finished flag: Bool) {

}

0개의 댓글