UIDeviceOrientationDidChangeNotification仅触发一次

时间:2011-04-17 16:49:15

标签: objective-c ios ipad

我正在尝试为我的一个视图处理viewcontroller上的设备方向更改。 这是我的代码:

- (void)viewDidLoad {
    [super viewDidLoad];
    NSLog(@"viewDidLoad");
    // Tell the UIDevice to send notifications when the orientation changes
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:UIDeviceOrientationDidChangeNotification object:nil];
}

// tell the director that the orientation has changed
- (void) orientationChanged:(NSNotification *)notification
{
    NSLog(@"orientationChanged");
}

当我第一次启动App时,将调用orientationChanged选择器,但之后无论我旋转多少iPad都不会再次调用它。有谁知道我可能做错了什么?当我在app delegate中放入类似的代码时,它工作正常,但在这个特定的视图控制器中,它的行为不正常。

2 个答案:

答案 0 :(得分:0)

我知道这个问题有点老了,但我想我会添加一个链接到我在同样情况下发现的教程(想要获取设备轮换的通知,无论界面方向如何是)。

This tutorial简要介绍了如何使用UIDeviceOrientationDidChangeNotification处理设备轮换。

我也遇到UIDeviceOrientationDidChangeNotification未触发的问题(它在模拟器中工作正常,但在我的设备上没有)。经过一些调试后,我意识到我在设备上锁定了纵向方向,这导致UIDeviceOrientationDidChangeNotification无法触发。不确定这是否是你的问题,但它很容易被忽视,值得检查。

答案 1 :(得分:-1)

问题是除非您指定方向,否则方向不会改变。当您旋转设备/模拟器时,框架会调用

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation;

其中界面方向是系统要使用的方向,但是您必须返回YES或它不会更改。

如果您没有返回,那么您的方向不会改变,因此您无法获得方向更改的通知(因为它没有发生)