0

我想在用户将屏幕旋转为横向或纵向时收到通知,有可能吗?

我找到了几篇文章,但我没有找到答案。

4

2 回答 2

3

如果您想在设备旋转时收到通知,您可以shouldAutorotateToInterfaceOrientation:在视图控制器中实现该方法,也可以注册以接收UIDeviceOrientationDidChangeNotification.

在我们开始之前,设备方向和界面方向可以不同。设备可能是横向的,但界面可能保持纵向,具体取决于应用程序的编写方式。在更改界面方向以匹配设备方向之前不久发送设备通知。如果您不想改变界面方向,您应该shouldAutorotateToInterfaceOrientation:在视图控制器中实现该方法以返回NO。这将停止更新界面方向。

从您的问题来看,您似乎想收到通知,所以我认为您想使用第二种方法。您可以UIDeviceOrientationChangeNotification使用以下方法启用 s:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

有对应的:

[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];

您可以注册以正常方式接收通知,使用NSNotificationCenter和注册接收UIDeviceOrientationDidChangeNotification

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(orientationChanged:)
                                             name:UIDeviceOrientationDidChangeNotification
                                           object:nil];

最后,您将实现在收到通知时调用的方法,如下所示:

- (void)orientationChanged:(NSNotication *)notification {

    UIDeviceOrientation = [[UIDevice currentDevice] orientation];

    if (orientation == UIDeviceOrientationPortrait || 
        orientation == UIDeviceOrientationPortraitUpsideDown) {

        // Portrait

    } else {
        // Landscape
    }

}

如您所见,可以使用 的 orientation实例方法访问方向UIDevice

于 2012-04-15T09:41:55.833 回答
1

shouldAutorotateToInterfaceOrientation您需要在方法中以横向添加本地通知

试试这样:

if(interfaceOrientation == UIInterfaceOrientationLandscapeRight || UIInterfaceOrientationLandscapeLeft)

    {
         here schedule your local notification
    }
于 2012-04-15T09:27:54.020 回答