gpt4 book ai didi

iphone - 在边界内倾斜移动图像

转载 作者:行者123 更新时间:2023-11-28 22:52:45 25 4
gpt4 key购买 nike

我目前正在创建一个 iPhone 应用程序,用于显示我的速度航向位置和一些其他传感器读数,供我的自行车使用。我已经设法从加速器上获得倾斜读数。我想做的是根据倾斜读数向左或向右移动图像。

    _______________________________
: === :
: = = :
: === :
-------------------------------

假设 = 符号是我的图像,我试图让它根据倾斜角度向左或向右移动。

有什么想法吗?我已经设法通过动画移动它,但如果我长时间倾斜,我不希望它继续移动。

最佳答案

首先,我使用以下方式添加了加速器数据:

UIAccelerometer *theAccelerometer = [UIAccelerometer sharedAccelerometer];
theAccelerometer.updateInterval = 0.1; //in seconds
theAccelerometer.delegate = self;

注意时间是 0.1 秒。您需要将该时间与下面的动画相匹配。然后我在 accelerometer:didAccelerate: 委托(delegate)调用中设置动画:

-(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);
}] ;
}

将动画持续时间与 UIAccelerometerupdateInterval 相匹配非常重要,这样您才能确保在下一次更新完成之前完成动画。

这里的重要部分可能是确定 newX 位置的数学运算。我基本上取了图像宽度的一半,因为那是最左边的绝对位置。从那里我知道我可以添加 320-imageView.frame.size.width 的空间。如果我添加整个 320-imageView.frame.size.width 那么我会在 320-imageView.frame.size.width/2 这是最右边的位置。从那里我只需要根据我们加速了多少来分解 320-imageView.frame.size.width block 。 accelerator.x 数据在 -1 到 1 的范围内,所以我的整个范围是 2。所以我在 accelerator.x 中添加了 1 以将其从 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 位置。

希望这就是您要找的!我在设备上对其进行了测试,只要您匹配持续时间,它就非常流畅。

关于iphone - 在边界内倾斜移动图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11528626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com