2011-05-07 58 views
2

我試着用加速度計通過這樣做,左右移動圖片:iPhone SDK:與周圍的加速度移動圖像

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

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

} 

當我測試的應用程序,是應該像走動只是坐在x0 y0的位置。

我宣佈加速度計,叫.H UIAccelerometerDelegate等等...

我到底做錯了什麼?

在此先感謝! -DD

回答

6

你知道加速度計返回,正如名稱所示,加速度不是顯示點上的點嗎?無論如何,你需要做的是改變中心(而不是完全取代它),這將允許你移動圖像。

東西沿着這些路線:

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

同樣重要的是要注意,加速度通常-1和1之間保持(除非用戶搖動設備),這是由於重力爲1G。因此,您可能應該將acceleration.x和.y值乘以某個常數,以使圖像的移動速度比每次大約1個點快一點。

還有其他的事情你應該考慮一下,如果圖像在屏幕邊緣怎麼辦?如果用戶想要在平面以外的其他位置使用應用程序(需要校準加速度計),該怎麼辦?

+0

lol XD我沒有意識到,在所有......順便說一句,有一個strabge的事情發生:x運動完美,但y運動是相反的。這是爲什麼? – DailyDoggy 2011-05-07 23:04:51

+0

sry ...在提問前沒有想到...這是image.center.y - acceleration.y不是+。 – DailyDoggy 2011-05-07 23:08:06

+0

是的,這張圖片有助於解釋爲什麼http://developer.apple.com/library/ios/documentation/uikit/reference/UIAcceleration_Class/Art/device_axes.jpg加速度計中的y軸與顯示的y軸相反。 – 2011-05-08 00:36:51

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