苹果手机SDK:使用加速度计移动图像



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

- (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。因此,您可能应该将 acceleration.x 和 .y 值与一些常量相乘,以使图像一次移动速度略快于 1 点。

您还应该考虑其他事项,如果图像位于屏幕边缘怎么办?如果用户想要在表面上平放以外的其他位置使用应用(需要校准加速度计),该怎么办?

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

最新更新