我的应用很简单:我想用加速度计(现在是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
];
}
);
}
];
}
答案 0 :(得分:1)
粘滞问题来自你的移动条件。现在,你说,如果“moveToX / Y”是&gt; 0,并且小于宽度/高度,然后添加加速度X / Y.
如果来源==或&gt;大于“maxX / Y”会怎样?答:没什么。因此,潜艇图像的行为就像它粘在一块板上一样。可能它可以在备用轴上移动,直到它最终停留在不再能够移动的状态。
您需要使用条件规则。我不知道你试图为游戏玩法实现什么类型的动作/输入,所以我不能告诉你接下来该做什么。我假设sub应该根据一些用户手势/动作上/下。
最后一条建议。加速度计基于G-Force ......这对你意味着什么,即使当你向左移动时,某些轴上的加速度是正的...当你需要施加停止所需的力时,还有一条反向曲线。尝试查看motiongraphs应用程序(文档中提供),以帮助您更好地感受/感受这些东西。
记住,玩得开心!