iphone - CGMotion在横向模式下移动UIImageView

时间:2014-01-22 18:32:28

标签: iphone objective-c uiimageview accelerometer core-motion

我的应用很简单:我想用加速度计(现在是Core Motion)在iPad的视图周围移动一个小的uiimageview。因此,我可以使用加速度计移动uiimageview,但是我无法在横向模式下建立工作边框。所以,这是我的代码。问题是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 个答案:

答案 0 :(得分:1)

粘滞问题来自你的移动条件。现在,你说,如果“moveToX / Y”是&gt; 0,并且小于宽度/高度,然后添加加速度X / Y.

如果来源==或&gt;大于“maxX / Y”会怎样?答:没什么。因此,潜艇图像的行为就像它粘在一块板上一样。可能它可以在备用轴上移动,直到它最终停留在不再能够移动的状态。

您需要使用条件规则。我不知道你试图为游戏玩法实现什么类型的动作/输入,所以我不能告诉你接下来该做什么。我假设sub应该根据一些用户手势/动作上/下。

最后一条建议。加速度计基于G-Force ......这对你意味着什么,即使当你向左移动时,某些轴上的加速度是正的...当你需要施加停止所需的力时,还有一条反向曲线。尝试查看motiongraphs应用程序(文档中提供),以帮助您更好地感受/感受这些东西。

记住,玩得开心!