2015-10-05 66 views
0

我需要鎖定所有控制器的自動旋轉,除了一個。它必須旋轉縱向和橫向。我已閱讀本topic並試用了此解決方案只允許一個控制器旋轉

let value = UIInterfaceOrientation.LandscapeLeft.rawValue 
UIDevice.currentDevice().setValue(value, forKey: "orientation") 

,但我沒有運氣,它沒有工作。也許這是因爲我使用導航控制器,在前面的鏈接中我看到了一些提及它們的地方,但我不明白這個方法,因爲作者允許在Xcode偏好設置中使用定向模式,然後將它們複製到代碼中。

也許有人可以提供建議嗎?

+0

您是否嘗試過使用UIViewController的類func attemptRotationToDeviceOrientation()? –

回答

0

當前處理旋轉的方法是viewControllerWillTransitionToSize:withTransitionCoordinator:。文檔位於此鏈接:https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIContentContainer_Ref/index.html#//apple_ref/occ/intfm/UIContentContainer/viewWillTransitionToSize:withTransitionCoordinator

這有點不同,因爲您使用的屏幕尺寸不是方向。這是處理大小和轉換的新方法。把它看作是一個響應式佈局,而不是不同的旋轉值。換一種說法,你不再爲「風景定位」而設計,但對於比它高的寬屏幕。這是一個微妙但重要的區別。

您可以針對不同的視圖控制器以不同的方式實現此方法。如果您使用的是導航控制器,並且想要以不同的方式影響子視圖,那麼首先我會說這是可能的糟糕UX。但是如果你仍然想這樣做,你可以在你的導航控制器中處理旋轉。

您不應該像這樣設置設備方向。

0

你可以試試這個方法。將此方法粘貼到視圖控制器上,以使設備支持縱向和橫向,除非顛倒方向。

func supportedInterfaceOrientations() -> UIInterfaceOrientationMask { 
    return UIInterfaceOrientationMaskAllButUpsideDown 
} 

但正如克里斯建議,您應該使用viewControllerWillTransitionToSize並處理所有關於那裏的方位。

+0

你的方法不工作:( –

+0

你允許在故事板設置文件中的肖像和風景方法? –

+0

你需要允許他們所有的文件,那麼只有這種方法將工作 –