2015-10-05 69 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

你需要允许他们所有的文件,那么只有这种方法将工作 –