2012-12-18 17 views
1

我想檢測設備的當前方向。註冊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]); 
} 

所以,我不能夠通過完善的方式來獲得設備的方向得到。

回答

0

您無法停止設備生成UIViewController輪換通知。查看問題here.

您鏈接到的文檔是指的是NSNotificationCenter通知。

+0

它說:「除非方向通知已通過調用beginGeneratingDeviceOrientationNotifications啓用,否則此屬性的值總是返回0。如果屬性指的是UIDevice – andyPaul

1

我想你的條件是錯的; U的它作爲 如果([[的UIDevice currentDevice] isGeneratingDeviceOrientationNotifications]) 它應該是

如果( [[的UIDevice currentDevice] isGeneratingDeviceOrientationNotifications])

+0

Thnks的「orientation」屬性,我已經更正了代碼,但現在它沒有進入註冊設備的if條件。我不知道它爲什麼會返回TRUE。我已經檢查了我的整個代碼,沒有其他地方正在從設備定位註冊。 – andyPaul

+0

註冊通知與生成通知不同。通常情況下,如果您打算在應用程序委託或適當的地方使用設備方向通知,則您將在UIDevice上調用beginGeneratingDeviceOrientationNotifications,並在U不再需要通知時在另一個適當的位置進行endGeneratingDeviceOrientationNotifications。這只是deviceOrientaion通知的初始設置。 – Siby

1

註冊的通知是從生成的通知不同。通常情況下,如果您打算在應用程序委託或適當的地方使用設備方向通知,則您將在UIDevice上調用beginGeneratingDeviceOrientationNotifications,並在U不再需要通知時在另一個適當的位置進行endGeneratingDeviceOrientationNotifications。這只是deviceOrientaion通知的初始設置。

要獲得這些通知是在你的控制器或對象U有我們的通知中心。 U註冊通知UIDeviceOrientationDidChangeNotification。 [[NSNotificationCenter defaultCenter]的addObserver:myObject的選擇:@selector(deviceRotated:)名稱:UIDeviceOrientationDidChangeNotification對象:無]

和當U不需要它,或在對象的從的dealloc通知中心將其刪除。