2013-02-01 10 views
6

Bir yol etrafında animasyon yaptığım bir top resmim var. Animasyon sonsuza dek tekrarlanacak şekilde ayarlandı, ancak tekrarlar arasında neden gecikme var?CAKeyFrameAnimasyon tekrarlanmadan önce erteleniyor

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); 

cevap

9

bu deneyin:

[animation setCalculationMode:kCAAnimationPaced] 
+0

Evet, bu bir çekicilik gibi çalışır! Teşekkürler! –

+0

Bunu anlamaya çalışmak için bir saat harcadı ... Neden bu varsayılan olmaz ?! – cph2117

0

Sen kCAFillModeForwards veya başka bir değere sahip kCAFillModeRemoved değiştirmeniz gerekir:

İşte benim kod. Dökümanı okuyun on why. Ayrıca

:

değiştirin:

[arcAnimation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]] 

(sizin test sonucuna bağlı olarak) ile:

[arcAnimation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]] 

veya

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

Nirav, kesinlikle içinde ya da dışında kolaylaştırmak istemiyoruz. Animasyonun hızlandırmak veya yavaşlamaksızın daire boyunca sabit bir hızla çalışmasını istiyorum. Tüm farklı doluluk modlarını denedim, hiçbiri animasyon üzerinde fark edilebilir bir etkiye sahip değil. Animasyon yine başlamadan önce bir an için durur. –

+0

Sonra bence bu şeyi yaratan setBeginTime çağrısı. Bir çağrı yaptığınız için, başlatması gereken gecikmeyi değerlendirmek için biraz zaman alır. Çıkarmayı dene. –

+0

Kaldırdım. Hala tam olarak aynı davranıyor. –

1

Ben gerçek bilmiyorum cevap, ama yapıyorsun Burada gereksiz şeyler çok, ve benim önerim, onu kaldırarak başlamak olacaktır. CATransaction bloğuna (begin ve commit) gerek yoktur. setBeginTime: için gerek yoktur. Gruplandırılmış bir animasyon olmadığından, removedOnCompletion ve fillMode'u ayarlamanıza kesinlikle gerek yoktur. Sadece animasyonu katmana ekleyin ve geri çekilin. Hemen başlayacak ve sonsuza kadar tekrarlanacak ve kodunuz daha basit ve daha iyi olacaktır.