如何在没有设备自动旋转的情况下检测iPhone上的旋转?

时间:2009-06-15 11:58:35

标签: iphone cocoa-touch rotation

任何人都知道怎么做?

我想到了:

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return YES;
}

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
}

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration {
}

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
}

- (void)willAnimateFirstHalfOfRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
}

- (void)didAnimateFirstHalfOfRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
}

- (void)willAnimateSecondHalfOfRotationFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation duration:(NSTimeInterval)duration {
}

可能会阻止设备旋转(覆盖我的UIViewController的所有旋转方法而不调用超类)但我担心它不是实际执行旋转的UIViewController。

我的UIViewController在UINavigationController中。

有人有什么想法吗?

干杯, 尼克。

3 个答案:

答案 0 :(得分:20)

您可以注册通知UIDeviceOrientationDidChangeNotification(来自UIDevice.h),然后当您关心方向更改时,请调用此方法:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

如果您不再关心方向更改,请调用此方法:

[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];

通知将在适用时发送,您可以查看[UIDevice currentDevice].orientation以了解当前的方向。

答案 1 :(得分:4)

另一方面,在2.x中旋转时,应该调用shouldAutoRotateToInterfaceOrientation,但在3.0中,它的一致性要低得多。另一篇文章中提到的通知是可靠的轮换指示的方法。

答案 2 :(得分:1)

您正在从YES返回shouldAutorotateToInterfaceOrientation:,我怀疑您不应该这样做。这是您需要实施的唯一方法,以防止设备旋转。

至于获取设备的当前方向,您可以使用[[UIDevice currentDevice] orientation]