2014-01-22 4 views
1

Мое приложение прост: я хочу переместить небольшое изображение uiimageview вокруг iPad с помощью акселерометра (теперь Core Motion). Таким образом, я могу перемещать uiimageview с помощью акселерометра, но у меня возникают проблемы с созданием рабочих границ в ландшафтном режиме. Итак, вот мой код. Проблема в том, что uiimageview имеет тенденцию придерживаться границ, а некоторые границы не совсем находятся на краю обзора. Вот мой код, любая помощь с благодарностью:iphone - CGMotion move UIImageView в ландшафтном режиме

- (void)startMyMotionDetect 
{ 

__block float stepMoveFactor = 15; 

[self.motionManager 
startAccelerometerUpdatesToQueue:[[NSOperationQueue alloc] init] 
withHandler:^(CMAccelerometerData *data, NSError *error) 
{ 

dispatch_async(dispatch_get_main_queue(), 
       ^{ 

        CGRect rect = self.sumbarine.frame; 

        float movetoY = rect.origin.x + (data.acceleration.x * stepMoveFactor); 
        float maxY = self.view.frame.size.width-rect.size.width; 

        float movetoX = (rect.origin.y + rect.size.height) 
        - (data.acceleration.y * stepMoveFactor); 

        float maxX = self.view.frame.size.height; 

        if (movetoX >0 && movetoX < maxX) { 
         rect.origin.x += (data.acceleration.y * stepMoveFactor); 
        }; 

        if (movetoY > 0 && movetoY < maxY) { 
         rect.origin.y += (data.acceleration.x * stepMoveFactor); 
        }; 

        [UIView animateWithDuration:0 delay:0 
             options:UIViewAnimationOptionCurveEaseIn 
            animations: 
        ^{ 
         self.sumbarine.frame = rect; 
        } 
            completion:nil 
        ]; 

       } 
       ); 
} 
]; 
} 

ответ

1

Проблема с приклеиванием исходит из ваших условий для перемещения. Прямо сейчас, вы говорите, если «moveToX/Y»> 0 и меньше ширины/высоты, то добавьте ускорение X/Y.

Что происходит, если происхождение == или> больше, чем «maxX/Y»? Ответ: Ничего. И, таким образом, изображение подводной лодки действует так, как будто оно прилипли к доске. Вероятно, он может двигаться на альтернативной оси, пока он, наконец, не застрянет в состоянии, когда он больше не может двигаться.

Вы хотите поиграть со своими условными правилами. Я не знаю, какие типы действий/ввода вы пытаетесь реализовать для игрового процесса, поэтому я не могу сказать вам, что делать дальше. Я предполагаю, что sub должен идти вверх/вниз в зависимости от какого-либо жестов/действия пользователя.

Последний совет. Акселерометры основаны на G-Force ... Что это означает для вас, даже если ускорение на какой-то оси положительно, когда вы двигаетесь, скажем, влево ... Также есть обратная кривая, когда вам нужно применить силу, необходимую для остановки. Попробуйте посмотреть приложение motiongraphs (доступно в документации), чтобы помочь вам лучше почувствовать/ощутить этот материал.

И помните, получайте удовольствие!

Смежные вопросы