2009-12-27 97 views
1

我正在試圖在其軸上旋轉一個輪子 - 使用鼠標將其設置爲運動。具體來說,我試圖旋轉輪盤。使用CBasicAnimation圍繞物體中心旋轉的問題

我通過得到x1 x2和y1 y2的差值來計算delta x和delta y。我可以通過NSLOG消息在控制檯中看到它沒問題。我使用這些值來計算速度。

CABasicAnimation * fullRotation; fullRotation = [CABasicAnimation animationWithKeyPath:@「transform.rotation」]; fullRotation.fromValue = [NSNumber numberWithFloat:0]; fullrotation.toValue = [NSNumber numberWithFloat :(((360 * M_PI)/ 180)); fullRotation.duration =持續時間; fullRotation.repeatCount = repeat;

[myview.layer addAnimation:fullRotation forKey:@「360」];

上面的代碼給了我流體動畫,但輪子總是完成一個完整的圓,這不是很現實。

任何人都可以提出一種方法,以較小的數量旋轉車輪,仍然給流體動畫?當我使用上述方法時,車輪根本無法移動少量。

謝謝!

Piesia

+0

對不起,我認爲*我選擇了代碼文本並點擊代碼按鈕來正確格式化代碼。 另外,當我寫鼠標時,我的意思是手指。 男孩,也許我不應該從今天起牀,更不用說張貼問題了! 感謝您的耐心和協助。 Piesia – Piesia 2009-12-27 15:35:00

回答

2

這聽起來像你需要一個小物理模型來獲得正確的行動在車輪上。我對這些API並不熟悉,我也沒有看到代碼考慮到手指運動所賦予的速度,但是我會在20年前從我的物理教訓中汲取教訓,希望它能提供幫助。

車輪的初始速度將由釋放時手指的運動決定。我們知道,某個點處車輪的線速度等於角速度乘以半徑到我們測量速度的點。

linear velocity = angular velocity * radius 

當車輪轉動時,主軸會碰到車輪摩擦,這會導致車輪減速。摩擦力是隨着時間推移施加的力,直到輪子停止。

Friction = Moment of Inertia of the Wheel * angular acceleration 

Friction/Moment of Inertia of the Wheel = angular acceleration 

對於應用程序的目的來說,這將是一個常數,你可能會想這個不同的值進行試驗,直到它「感覺不錯」。

要計算的時間量,解決了以下公式時間:因爲你放慢

0 = angular velocity + angular acceleration * time 

角加速度將是負面的。一旦你擁有的時間量,你會通過以下方法來計算轉數:

revolutions = ((angular velocity * time) + (0.5 * angular acceleration * time^2))/(2 * pi) 

時間^ 2時平方,或時間*時間。

我希望這會有所幫助。

+0

大衛,非常感謝!我會研究這個問題(這可能需要一個星期左右的時間,因爲我被拉到另一個項目),但我一定會發現你的信息豐富和有益的! 此致敬禮, Piesia – Piesia 2009-12-28 20:56:40