2013-02-01 3 views
6

경로 주변에서 움직이는 공 이미지가 있습니다. 애니메이션이 영원히 반복되도록 설정되었지만 반복간에 지연이있는 이유는 무엇입니까?CAKeyFrameAnimation이 반복되기 전에 지연됩니다.

CGPathRef aPath; 
aPath = CGPathCreateWithEllipseInRect(CGRectMake(0, 0, SIZE, SIZE), NULL); 

[CATransaction begin]; 

arcAnimation = [CAKeyframeAnimation animationWithKeyPath: @"position"]; 
[arcAnimation setBeginTime:CACurrentMediaTime()]; 
[arcAnimation setDuration: 1.5]; 
[arcAnimation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]]; 
[arcAnimation setAutoreverses: NO]; 
[arcAnimation setRepeatCount:HUGE_VALF]; 
arcAnimation.removedOnCompletion = NO; 
arcAnimation.fillMode = kCAFillModeRemoved; 
[arcAnimation setPath: aPath]; 
[ball.layer addAnimation: arcAnimation forKey: @"position"]; 
[CATransaction commit]; 
CFRelease(aPath); 

답변

9

이 시도 :

[animation setCalculationMode:kCAAnimationPaced] 
+0

예, 이것은 매력처럼 작동합니다! 감사! –

+0

이것을 알아 내려고 한 시간을 보냈습니다. 왜 이것이 기본값이 아니겠습니까?! – cph2117

0

당신은 kCAFillModeForwards 또는 다른 값 kCAFillModeRemoved을 교체해야합니다

여기 내 코드입니다. 설명서 on why을 읽으십시오. 또한

:

교체 :

[arcAnimation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]] 

을 (당신의 테스트 결과에 따라)으로 :

[arcAnimation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]] 

또는

[arcAnimation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]] 
+0

Nirav, 나는 확실히 또는 밖으로 완화하고 싶지 않아요. 애니메이션을 속도를 높이거나 낮추지 않고 서클을 통해 일정한 속도로 실행하고 싶습니다. 모든 다른 채우기 모드를 시도했지만 아무도 애니메이션에 눈에 띄는 영향을 미치지 않습니다. 애니메이션이 끝날 때까지 잠시 멈추고 다시 시작됩니다. –

+0

그럼 이걸 만들고있는 setBeginTime 호출이라고 생각합니다. 전화를 걸면 시작해야하는 초를 평가하는 데 시간이 걸리고 지연이 계산됩니다. 제거해보십시오. –

+0

삭제했습니다. 여전히 똑같은 동작을합니다. –

1

나는 실제를 모르는 대답,하지만 너는하고있어. 여기에 불필요한 것들이 많이 있습니다. 제 제안은 그것을 제거함으로써 시작하는 것입니다. CATransaction 블록 (begincommit)은 필요하지 않습니다. setBeginTime:에 대한 필요가 없습니다. 그룹화 된 애니메이션이 아니기 때문에 removedOnCompletionfillMode을 설정할 필요가 없습니다. 레이어에 애니메이션을 추가하고 뒤로 물러서십시오. 즉시 시작되고 영원히 반복되며 코드가 더 간단해질 것입니다.