2017-08-07 68 views
2

我做了一些我的意見風景和一些其他人像。 我的問題是,我不想讓他們旋轉。 如果一個頁面是風景留下只是風景和肖像的。 我搜索了很多,我嘗試:鎖定旋轉一些視圖swift

override func shouldAutorotate() -> Bool { 
    return false 
} 

override var supportedInterfaceOrientations: UIInterfaceOrientationMask { 
    return UIInterfaceOrientationMask.portrait 
} 

但它沒有工作

回答

1

剛剛拿到定向覆蓋,其中:

 override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { 

    if UIDevice.current.orientation.isLandscape && flag{ 
     let value = UIInterfaceOrientation.portrait.rawValue 
     UIDevice.current.setValue(value, forKey: "orientation") 
     print("Landscape") 
    } else if UIDevice.current.orientation.isPortrait && !flag { 
     let value = UIInterfaceOrientation.landscapeLeft.rawValue 
     UIDevice.current.setValue(value, forKey: "orientation") 
     print("Portrait") 
    } 
} 

,做財產以後這樣的。

這個功能不會鎖定你的屏幕,但它會保持屏幕在你想要的方向。

1

你是在正確的軌道上,但是當用戶處於縱向作案,並且由於視圖處於橫向狀態而想要強制橫向用戶,則必須更改方向。

UIDevice.current.setValue(UIDeviceOrientation.landscapeLeft.rawValue, forKey: "orientation") 

更多的UIDevice選項,請參閱蘋果的文檔: https://developer.apple.com/documentation/uikit/uideviceorientation

爲了確保用戶無法回到肖像,您可以添加:(你已有的代碼)

override var supportedInterfaceOrientations: UIInterfaceOrientationMask { 
    return UIInterfaceOrientationMask.landscape 
} 
+0

是的,這使得景觀或肖像,但它仍然可以旋轉。 –

+0

你確定你在正確的ViewController中覆蓋'supportedInterfaceOrientations'嗎? –

+0

是的,我現在再試一次... –

1

添加此屬性和功能在AppDelegate

internal var shouldRotate = false 
    func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask { 
     return shouldRotate ? .landscape : .portrait 
    } 

和不斷想要把這個線

let appDelegate = UIApplication.shared.delegate as! AppDelegate 
appDelegate.shouldRotate = true