2010-12-30 2 views
1

저는 베 지어 곡선을 사용하여 CAKeyFrameAnimation을 사용하여 움직일 객체를 애니메이션 처리했습니다. 그러나 개체가 사용자 탭 감지시 곡선의 어느 지점에서 멈 춥니 다. 그런 다음 버튼을 클릭하여 이동을 다시 시작하면 개체가 나머지 경로를 따라 끝까지 이동해야합니다. 어떻게해야합니까?BezierPath 애니메이션

경로를 CAKeyFrameAnimation 개체에 추가 한 다음 다시 시작 단추를 클릭하면 개체가 경로의 시작 부분에서 끝 부분으로 바로 이동합니다. 멈추지 않은 지점에서. 멈추었을 때부터 멈추지 않고 처음부터 다시 시작하지 않기를 바란다. 멈추는 지점에서부터 경로를 따라 움직이는 방법은 없나요?

답변

3

코어 애니메이션 타이밍은 모두 CAMediaTiming 프로토콜로 구현됩니다. 속성 중 하나는 speed이며 부모 레이어의 시간 간격을 기준으로 한 레이어의 애니메이션 타이밍을 정의합니다. speed 속성을 0.0으로 설정하면 애니메이션이 효과적으로 일시 중지됩니다.

애니메이션을 다시 시작한 후에 애니메이션을 제대로 끝내려면 약간의 정리 작업이 필요합니다. docs의 Technical Q&A QA1673에는 다음과 같은 예제 코드가 있습니다.

-(void)pauseLayer:(CALayer*)layer 
{ 
    CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil]; 
    layer.speed = 0.0; 
    layer.timeOffset = pausedTime; 
} 

-(void)resumeLayer:(CAlayer*)layer 
{ 
    CFTimeInterval pausedTime = [layer timeOffset]; 
    layer.speed = 1.0; 
    layer.timeOffset = 0.0; 
    layer.beginTime = 0.0; 
    CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime; 
    layer.beginTime = timeSincePause; 
}