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应用程序(可在文档中找到),以帮助您更好地了解/理解这些内容。
记住,玩得开心!