注册UIDeviceOrientation

时间:2012-12-18 16:17:18

标签: ios uidevice uideviceorientation

我想检测设备的当前方向。

所以,我使用了一行代码

注意:即使我没有注册,它也会给我定位

-(IBAction) deviceOrientationChanged:(id) sender{
    NSLog(@"Device Orientation= %d",[[UIDevice currentDevice] orientation]);
}

当我更改方向时,在按钮单击事件中,我获得设备方向。

但是,document表示您需要先注册,然后使用上面的代码。

注意:在下面的代码中,我已注册设备以接收设备方向通知

-(IBAction) deviceOrientationChanged:(id) sender{

    if(![[UIDevice currentDevice] isGeneratingDeviceOrientationNotifications]){
        //This statement is called very time when I click on the button. I expected to execute only once.
        [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    }
    NSLog(@"Device Orientation= %d",[[UIDevice currentDevice] orientation]);
}

所以,我无法通过完美的方式获得设备方向。

3 个答案:

答案 0 :(得分:1)

我认为你的条件是错的; 你有它 if([[UIDevice currentDevice] isGeneratingDeviceOrientationNotifications]) 它应该是

if( [[UIDevice currentDevice] isGeneratingDeviceOrientationNotifications])

答案 1 :(得分:1)

注册通知与生成通知不同。通常,如果您计划在应用程序委托中或在适当的位置使用设备方向通知,您将在UIDevice上调用beginGeneratingDeviceOrientationNotifications,并在U不再需要通知时将endGeneratingDeviceOrientationNotifications放在另一个适当的位置。这只是deviceOrientaion通知的初始设置。

要在控制器或对象中获取这些通知,您必须向我们通知中心。 U注册通知UIDeviceOrientationDidChangeNotification。 [[NSNotificationCenter defaultCenter] addObserver:myObject selector:@ selector(deviceRotated :) name:UIDeviceOrientationDidChangeNotification object:nil]

并在U不需要时或在对象的dealloc中将其从通知中心删除。

答案 2 :(得分:0)

您无法阻止设备生成UIViewController轮换通知。请参阅问题here.

您链接到的文档指的是NSNotificationCenter通知。