iphone-CGMotion在风景模式下移动UIImageView

问题描述:

我的应用很简单:我想用加速度计(现在是Core Motion)在iPad的视图周围移动一个小的uiimageview。所以,我可以使用加速度计移动uiimageview,但是在横向模式下建立工作边界时遇到问题。所以,这是我的代码。问题在于uiimageview倾向于坚持边界,并且一些边界不完美地位于视图的边缘。这里是我的代码,不胜感激:iphone-CGMotion在风景模式下移动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 
        ]; 

       } 
       ); 
} 
]; 
} 

坚持的问题来自您的移动条件。现在,你说,如果“moveToX/Y”大于0,小于宽度/高度,则加入加速度X/Y。

如果原点是==或>大于“maxX/Y”,会发生什么情况?答:没有。因此,潜艇图像就像卡在板子上一样。可能它可以在替代轴上移动,直到它最终停留在不再移动的状态。

你会想玩弄你的条件规则。我不知道你想要为游戏玩法实施什么类型的动作/输入,所以我不能告诉你下一步该做什么。我假设sub应该上/下取决于某些用户的手势/动作。

最后一条建议。加速度计是基于G-Force的......这对你而言意味着什么,即使在你移动的时候某个轴上的加速度是左边的......当你需要应用停止所需的力时,还有一个反曲线。尝试查看motiongraphs应用程序(可在文档中找到),以帮助您更好地了解/理解这些内容。

记住,玩得开心!