我想检测设备的当前方向。
所以,我使用了一行代码
注意:即使我没有注册,它也会给我定位
-(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]);
}
所以,我无法通过完美的方式获得设备方向。
答案 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
通知。