Iphone SDK:使用加速计移动图像

Iphone SDK:使用加速计移动图像,iphone,image,accelerometer,move,Iphone,Image,Accelerometer,Move,我试图通过这样做,用加速计移动图像: - (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration { image.center = CGPointMake(acceleration.x, acceleration.y); } 当我测试应用程序时,应该移动的图像只是位于x0-y0位置 我声明了加速计,称为.h UIAccelerometerDel

我试图通过这样做,用加速计移动图像:

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {

    image.center = CGPointMake(acceleration.x, acceleration.y);

}
当我测试应用程序时,应该移动的图像只是位于x0-y0位置

我声明了加速计,称为.h UIAccelerometerDelegate等等

我做错了什么


提前谢谢-DD

您是否意识到,正如名称所示,加速度计返回的是加速度测量值,而不是显示屏上的点?无论如何,您需要做的是改变中心(而不是完全替换),这将允许您移动图像

大致如下:

image.center = CGPointMake(image.center.x + acceleration.x, 
                           image.center.y - acceleration.y);
还需要注意的是,加速度通常保持在-1和1之间(除非用户摇晃设备),这是由于重力为1G。因此,您可能应该将加速度.x和.y值乘以某个常数,使图像一次移动的速度略快于约1点


你还应该考虑其他一些事情,如果图像位于屏幕边缘怎么办?如果用户想在平面以外的其他位置使用应用程序(需要校准加速计),该怎么办?

lol XD我根本没有意识到。。。顺便说一句,发生了一件很奇怪的事情:x运动完美,但y运动是相反的。为什么?sry。。。在问之前没想过。。。它是image.center.y-加速度。y不是+。是的,这张图片有助于解释为什么加速度计中的y轴与显示的y轴相反。
-(void)moveImage:(id)sender 
{
    [operationView bringSubviewToFront:[(UIPanGestureRecognizer*)sender view]];

    [[[(UIPanGestureRecognizer*)sender view] layer] removeAllAnimations];

    CGPoint translatedPoint = [(UIPanGestureRecognizer*)sender translationInView:self.view];

    if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateBegan)
    {
    firstX = [[sender view] center].x;
    firstY = [[sender view] center].y;
        [imgDeleteView setHidden:FALSE];
    }
    else if ([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded)
    {
        [imgDeleteView setHidden:TRUE];
    }

    translatedPoint = CGPointMake(firstX+translatedPoint.x, firstY+translatedPoint.y);
    [[(UIPanGestureRecognizer *)sender view] setCenter:translatedPoint];
 }