首先,我使用添加的加速器数据。您需要将该时机与下面的动画进行匹配。然后,我设置了动画在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