2009-07-22 3 views
23

나의 이해를 위해서, beginTime은 "어이, 정확히 12시에 시작하십시오."라고 말할 수 있습니다. 하지만 CFTimeInterval 유형을 사용하면 어떻게 알 수 있습니까? 나는 이것이 초를 지정하는 일종의 "float"값 이상이라고 생각하지 않았습니다.CFTimeInterval을 사용하여 애니메이션의 beginTime을 지정하는 방법은 무엇입니까?

또는 CAMediaTiming 프로토콜에 지정된 timeOffset 속성과 다른 점은 무엇입니까?

답변

8

아니요, beginTime과 다릅니다. 부모 애니메이션과의 상대 시작 시간을 지정합니다 (기본적으로 그룹의 여러 애니메이션이 동시에 실행됩니다). documentation에서

:

은 해당되는 경우, 그 부모 목적과 관련하여 수신기의 시작 시간을 지정합니다.

timeOffset은 오프 세트 시간에있을 프레임에서 애니메이션을 시작하게하고, 끝까지 도달하면 반복합니다. 즉, A, B, C, D, E가 애니메이션의 프레임이라고 생각하면 beginTime 또는 timeOffset을 일반적인 경우 프레임 C를 치는 것과 같은 값으로 설정하면 다양한 경우에 어떤 일이 일어날 지 상상해보십시오. 나는이 문서에서 놓친 무엇

Normal  |A->B->C->D->E 
beginTime: |  A->B->C->D->E 
timeOffset: |C->D->E->A->B 
+1

timeOffset을 설정해도 애니메이션이 지연되지 않으며 초기 시간이 변경되지 않습니다. 'timeOffset'에 대한 라인은 실제로 'timeOffset'과 'beginTime'...을 설정하는 것입니다. 맞습니까? –

+0

당신이 정확하다 명확하게 –

+3

루이, 그냥 애니메이션을 실행하는 방법이 있는지 아십니까 : Partial : | - - A -> B -> C, 그래서 기본적으로 당신이 언급 한 beginTime의 경우와 동일하지만 루프가 돌아 다니는 대신에 끝나면 멈출 수 있습니까? – pho0

52

: 현재 시간을 얻을 지정했습니다 있도록 BEGINTIME는 "핵심 애니메이션 절대 시간"에 당신의 그 오프셋 :

// Start in 5 seconds 
theAnimation.beginTime = CACurrentMediaTime()+5; 
+3

beginTime은 절대 시간을 기준으로하지 않고 상위 시간 공간에 지정됩니다. – an0

+1

@ an0, 분명히, 내 경우에는 부모 시간 공간이 CACurrentMediaTime()과 동일하므로 잘 작동합니다. 부모 시간 공간을 어떻게 참조 하시겠습니까? –

+0

우리는 레이어 시간 공간 - 레이어에 직접 추가 된 애니메이션의 부모 시간 공간 -에서 현재 시간을 사용해야합니다. layer의 beginTime이 0이 아닌 값으로 설정되면 코드가 작동하지 않습니다. 자세한 내용은 내 대답을 참조하십시오. – an0

11

나는 문서 생각 CAMediaTiming Protocol은 매우 나쁩니다. Time Warp in Animation은 CAMediaTiming Protocol의 모든 속성에 대한 철저한 설명 (재 문서화)입니다.

13

당신이 먼저 필요과 같이 레이어의 timespace로 변환 할 :

let currentLayerTime = myLayer.convertTime(CACurrentMediaTime(), fromLayer: nil) 

는 그런 다음 레이어의 현재 시간에 BEGINTIME 상대적으로 설정할 수 있습니다. 예를 들어, 애니메이션이 2 초에 시작 만들려면 :

myAnimation.beginTime = currentLayerTime + 2 

을 또한 가능성이 당신이 마지막 속성 값을 설정할 수 있도록 애니메이션을 추가하기 전에, 뒤로 'FILLMODE'로 설정하는 것이 좋습니다 :

myAnimation.fillMode = kCAFillModeBackwards 
myLayer.someProperty = someFinalValue 
myLayer.addAnimation(myAnimation, forKey: "myAnimationName") 
관련 문제