關於監聽與控制裝置旋轉全解析(UIDeviceOrientationDidChangeNotification)

流火行者發表於2015-03-17

一類情況:

  初始化app的方向,比如只支援橫屏或者豎屏。下面舉例只支援豎屏的案例

在app的屬性裡面手動設定

 

上面標註了該app支援的方向種類,要是在app裡支援Portrait方向,還需要新增以下程式碼

二類情況:

上面的程式碼表明app支援了兩個方向,Protrait 和PortraitUpsideDown,如果我要求在app在某個

方向的時候禁止螢幕旋轉,該怎麼做呢?

在swift中禁止當前螢幕旋轉

       UIDevice.currentDevice().endGeneratingDeviceOrientationNotifications()
        UIDevice.currentDevice().endGeneratingDeviceOrientationNotifications()

 注意是兩行,理論上只要一行程式碼,但是可能是swift中的bug,筆者發現連續呼叫兩次才能達到

禁止螢幕旋轉的效果

開啟螢幕旋轉:

UIDevice.currentDevice().beginGeneratingDeviceOrientationNotifications()

 這裡只要一行就可以開啟螢幕旋轉的功能了,?

三類情況:

我們在控制了螢幕怎麼旋轉之後該怎麼監聽這些旋轉的事件呢?因為我們往往需要在螢幕旋轉的時候做

一些我們需要的操作。

在初始化的時候新增事件監聽:

    override func viewWillAppear(animated: Bool) {
             NSNotificationCenter.defaultCenter().addObserver(self, selector: "deviceOrientChange:", name: UIDeviceOrientationDidChangeNotification, object: nil)
    }

在deviceOrientChange中就可以任意的寫自己需要的功能了

在UI刪除的時候一定要記得刪除監聽

NSNotificationCenter.defaultCenter().removeObserver(self, name: UIDeviceOrientationDidChangeNotification, object: nil)

 

 注意:

  如果某個UI監聽了Notification的事件,在將這個物件在superView中刪除的時候務必在之前登出這個監聽,否則會崩潰程式

可以新增解構函式:

 


 

相關文章