Iphone SDK: перемещайте изображение с помощью акселерометра - PullRequest
2 голосов
/ 08 мая 2011

Я пытаюсь переместить изображение с помощью акселерометра, выполнив следующие действия:

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

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

}

Когда я тестирую приложение, изображение, которое должно перемещаться, просто находится в положении x0 y0.

Я объявил акселерометр, назвал .h UIAccelerometerDelegate и так далее ...

Что я делаю не так?

Заранее спасибо!-DD ​​

Ответы [ 2 ]

6 голосов
/ 08 мая 2011

Вы понимаете, что акселерометр возвращает, как следует из названия, показатели ускорения, а не точки на дисплее? В любом случае, вам нужно изменить центр (а не заменить его полностью), что позволит вам перемещать изображение.

Что-то вроде этого:

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

Также важно отметить, что ускорение обычно остается между -1 и 1 (если пользователь не встряхивает устройство), что связано с силой тяжести 1G. Поэтому вам, вероятно, следует умножить значения acceleration.x и .y на некоторую константу, чтобы изображение двигалось немного быстрее, чем примерно на 1 пункт за раз.

Есть дополнительные вещи, о которых вы должны подумать, что, если изображение находится на краю экрана? Что если пользователь захочет использовать приложение в каком-либо ином положении, кроме плоского на поверхности (требуется калибровка акселерометра)?

0 голосов
/ 05 апреля 2013
-(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];
 }
...