首先,我使用添加的加速器數據。您需要將該時機與下面的動畫進行匹配。然後,我設置了動畫在accelerometer:didAccelerate:
委託調用:
-(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
{
NSInteger newX = 0;
newX = imageView.frame.size.width/2 + ((320-imageView.frame.size.width) * (acceleration.x+1)/2.0);
[UIView animateWithDuration:0.1 animations:^{
imageView.center = CGPointMake(newX, imageView.center.y);
}] ;
}
它以匹配UIAccelerometer
這樣的updateInterval
動畫持續時間是重要的,你要確保未來的更新來通過前完成動畫。
這裏的重要部分可能是確定newX
位置的數學。我基本上佔了圖像寬度的一半,因爲那是最左邊的絕對位置。從那裏我知道我有一個320-imageView.frame.size.width
我可以添加的房間數量。如果我添加了整個320-imageView.frame.size.width
,那麼我將在320-imageView.frame.size.width/2
這是最右邊的位置。從那裏我只需要根據我們加速多少來分解320-imageView.frame.size.width
塊。 accelerator.x
數據範圍是-1到1,所以我的整個範圍是2.所以我加了1到accelerator.x
從0-2歸一化。然後我除以2.0,以便我有一個0-1的範圍。現在我有一個乘數,我可以乘以我的320-imageView.frame.size.width
範圍。如果它是0,我會在最左邊的位置。如果是1,我會處於最右邊的位置,其間的任何內容都會線性分解。所以最後一項是:
imageView.frame.size.width/2 + ((320-imageView.frame.size.width) * (acceleration.x+1)/2.0);
得到圖像的新x位置。
我希望這就是你要找的!我在設備上測試過它,只要您匹配您的持續時間,它就非常流暢。
所以你有加速器數據,只是想弄清楚如何獲得一個平滑的動畫的傾斜?還是你想弄清楚加速器數據呢? – 2012-07-17 19:07:26
那是正確的,我知道如何動畫,我有傾斜角度。即時通訊嘗試讓UIImageView移動到左側或右側,取決於設備的傾斜度。 im gueing我必須將運動邊界劃分爲一個百分比,然後根據它的傾斜程度取決於運動的百分比。 – Spriggsy 2012-07-17 20:02:18
這就是我會做的。每當傾斜度發生顯着變化時,只需使用動畫更新圖像中心。如果到那時你還沒有發現任何問題,我會在回家時寫一個答案。 – 2012-07-17 20:15:51