我正在创建一个iPhone应用程序,显示我的速度标题位置和一些其他传感器读数,以便在我的自行车上使用。我已经设法从加速器获得倾斜读数。我要做的是根据倾斜读数的不同向左或向右移动图像。
_______________________________
: === :
: = = :
: === :
-------------------------------
让我们说=符号是我的图像,我试图让它向左边或右边移动,具体取决于倾斜角度。
任何想法?我设法通过动画移动它,但如果我长时间倾斜,我不希望它继续移动。
答案 0 :(得分:2)
首先我使用以下方法添加了加速器数据:
UIAccelerometer *theAccelerometer = [UIAccelerometer sharedAccelerometer];
theAccelerometer.updateInterval = 0.1; //in seconds
theAccelerometer.delegate = self;
注意时间是0.1秒。您需要将该时间与下面的动画相匹配。然后我在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);
}] ;
}
将动画持续时间与updateInterval
的{{1}}相匹配非常重要,这样您才能确保在下次更新完成之前完成动画。
这里的重要部分可能是确定UIAccelerometer
位置的数学。我基本上占据了图像宽度的一半,因为这是最左边的绝对位置。从那里我知道我有一个newX
的空间,我可以添加。如果我添加了整个320-imageView.frame.size.width
,那么我将位于320-imageView.frame.size.width
这是最右边的位置。从那里我只需要根据我们加速的程度来分解320-imageView.frame.size.width/2
块。 320-imageView.frame.size.width
数据的范围是-1到1,所以我的整个范围是2.所以我在accelerator.x
中添加了1以将其从0-2标准化。然后我除以2.0,这样我的范围从0到1。现在我有一个乘数,我可以将accelerator.x
范围乘以。如果它是0我会在最左边的位置。如果是1,我将处于最右边的位置,中间的任何东西都将被线性地分解。所以最后一个词是:
320-imageView.frame.size.width
获取图像的新x位置。
我希望这就是你要找的!我在一台设备上对它进行了测试,只要你匹配你的持续时间,它就会很顺利。
答案 1 :(得分:0)
如果您问的是关于动画的问题。这是代码苹果推荐动画UIView。您可以更改x和y坐标的值。
imageFrame.origin.y = 200;
[UIView animateWithDuration:0.5
delay:0.0
options: UIViewAnimationCurveEaseOut
animations:^{
datePickerView.frame = imageFrame;
}
completion:^(BOOL finished){
self.datePickerViewFlag = YES;
}];