是否可以仅通过向左/向右转动设备来切换到另一个视图控制器?
我会尝试: // LandscapeTabView
override func viewWillLayoutSubviews() {
if UIDevice.current.orientation == UIDeviceOrientation.landscapeLeft || UIDevice.current.orientation == UIDeviceOrientation.landscapeRight {
}
else {
}
但是不知道填写这个功能的内容是什么? 谢谢你帮助新手!
答案 0 :(得分:0)
首先:您可以像这样订阅有关设备轮换的系统通知
NotificationCenter.default.addObserver(self, selector: #selector(self.orientationChanged), name: NSNotification.Name.UIDeviceOrientationDidChange, object: nil)
然后制作功能
func orientationChanged() {}
为了确定正确的状态,我建议使用此方法
UIApplication.shared.statusBarOrientation == .portrait
如果它是真实的 - 肖像,虚假景观
因此,依赖于状态,例如,您可以推送某些vc on landscape, pop 当设备返回时。 对于推送,您可以轻松地创建ViewController的实例,如
let vc = self.storyboard?.instantiateViewControllerWithIdentifier("here_is_vc_id") as! YourViewController
对于pop:
_ = navigationController.pushViewController(vc, animated: true)
注意:您实例化的VC必须存储在一个(和主要)故事板上。您还需要在身份检查器中设置一个is(其中字符串" here_is_vc_id"去)" Storyboard ID"字段。
你走了:))
答案 1 :(得分:0)
尝试我的努力 -
func rotated()
{
if(UIDeviceOrientationIsLandscape(UIDevice.currentDevice().orientation))
{
print("landscapeMode")
let nextView = self.storyboard?.instantiateViewControllerWithIdentifier("HomeWorkViewController") as! HomeWorkViewController
self.navigationController?.pushViewController(nextView, animated: true)
}
if(UIDeviceOrientationIsPortrait(UIDevice.currentDevice().orientation))
{
print("PortraitMode")
//As you like
}
}
答案 2 :(得分:0)
建议的方法是有效的,但建议的方法是使用UIContentContainer
协议(iOS8 +)。
然后,您可以将子视图控制器添加到控制器并控制它应如何设置动画。您可以将其用作参考:Implementing a Container View Controller。
override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)
let isPortrait = size == UIScreen.mainScreen().fixedCoordinateSpace.bounds.size
// Add a child view controller if landscape, remove it if portrait...
}