說我要到球滾動1000個像素動畫的權利,在這個過程中指定計時功能 - 是這樣的:CAAnimation在週期性動畫進度間隔中調用方法?
UIView *ball = [[UIView alloc] initWithFrame:CGRectMake(0,0,30,30)];
CABasicAnimation* anim =
[CABasicAnimation animationWithKeyPath:@"transform.translation.x"];
anim.toValue = [NSNumber numberWithFloat:ball.frame.origin.x + 1000.0];
// move 1000 pixels to the right
anim.duration = 10.0;
anim.timingFunction = [CAMediaTimingFunction functionWithControlPoints:
0.1 :0.0 :0.3 :1.0]; // accelerate fast, decelerate slowly
[ball.layer addAnimation:anim forKey:@"myMoveRightAnim"];
我最終想是有一個方法,說-(void)animationProgressCallback:(float)progress
,在動畫期間,在動畫的進度的規則間隔中,根據開始值和結束值之間的絕對「距離」,即忽略定時功能。
我會嘗試用球滾動1000像素到右邊上面的例子來解釋(以Y軸繪製,在我們的例子中100%= 1000像素):
我想我的回調方法在球進展250個像素時被調用。由於計時功能的原因,前250個像素可能會在達到= 2秒,達到總距離的一半ti = 0.7秒後(快速加速啓動),750px標記另一個ti = 1.1秒後,並且需要剩餘的時間= 5.2秒才能達到100%(1000px)標記。
會是什麼偉大的,但沒有提供:
如果動畫稱爲動畫正在進行間隔委託方法所描述的,我不會要問這個問題... ;-)
想法如何解決這個問題:
一個解決方案,我能想到的是計算貝塞爾曲線的價值觀,其映射到TI ķ值(我們知道總動畫持續時間),當動畫開始時,我們會手動按順序執行animationProgresssCallback:
選擇器。顯然,這是瘋了(手工計算貝塞爾曲線??),更重要的是,不可靠(我們不能依賴動畫線程和主線程同步 - 或者我們可以嗎?)。
任何想法??
期待您的想法!
感謝您指出我不必擔心線程間同步。這鼓勵我按照我的建議去做。到目前爲止,它看起來不錯! – 2010-07-19 13:22:22