iPhone/iPad旋转问题

3
我如何在这些设备上检测旋转的开始和结束? 编辑: 在您的回答之后,我如何检测方向更改的开始和结束。

你打算在进行1g加速的宇宙飞船中测试这个吗? - Claus Broch
请查看我在 http://stackoverflow.com/questions/2489845/rotate-uiviewcontroller-to-counteract-changes-in-uiinterfaceorientation/2490719#2490719 的答案。 - Madhup Singh Yadav
3个回答

9
你可以在你的UIViewController中实现以下两种方法。
要检测旋转开始,实现willRotateToInterfaceOrientation:duration:,要检测结束,实现didRotateFromInterfaceOrientation:
例如:
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    NSLog(@"I am starting to rotate");
}

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
    NSLog(@"I have finished rotating");
}

0

你可以使用UIAccelerometer API来实现这个功能。

根据问题的澄清,编辑如下:

使用UIAccelerometer API来实现这个功能。有一个很好的示例应用程序叫做AccelerometerGraph,它会在图表上显示三个加速度向量。这应该能够给你一个很好的指示,说明方向的变化会是什么样子。


不可以。加速度计无法检测旋转。 - Marcelo Cantos
这取决于设备是否围绕自身轴旋转。虽然无法直接检测到旋转,但是每个x、y、z轴可能具有不同的加速度值,可以用于检测旋转。 - Claus Broch
@Claus,在没有先验知识的情况下,无法(在非常深刻的爱因斯坦意义上)区分圆周运动和加速度。 - Marcelo Cantos
啊,既然你现在把爱因斯坦牵扯进来,我肯定要同意你的观点 :-) - Claus Broch
Claus,你的修改和原始答案一样错误。你不能从加速度计中判断方向。通过旋转设备产生的任何加速度计读数序列都可以通过移动设备而不旋转来复制。 - Marcelo Cantos
嗯...有没有人告诉苹果他们无法检测 iPhone 的方向?我知道理论上这是不可能的,但是假设你不是坐在一架进行1g恒定加速的宇宙飞船里,这会让设备认为它的方向不同... - Claus Broch

0

这两个设备都无法检测旋转。加速度计只能检测速度的变化。

您可以从CLLocationManager类中获取方向的粗略测量值,该类报告一个航向。但是,该值更新速度较慢,其实用性受到限制。


严格来说,加速度计报告影响设备的三个轴上的力量,以G为单位进行测量。因此,如果您将设备静置在桌子上,您将在z轴上获得一个恒定的z值,即-1 G。这并不意味着设备通过桌子以9.8 m/s^2的加速度运动 :-) - Claus Broch
@Claus,加速度和重力是相同的概念。你无法区分它们中的一个。如果手机在太空中背上有一个微小的喷气背包,以1 G向前推动它,那么加速计将在Z方向测量-1 G,就像在你的情况下一样。这意味着在两种情况下,手机都以1 G的速度向前加速(而不是向后)。由于地球相当庞大,它会扭曲时空,使得手机在平放在桌子上时的1 G向外加速度保持与地球中心的固定距离。 - Marcelo Cantos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接