我正在尝试做一些我觉得很容易的事情,但是,我似乎无法得到它。我有两个视图控制器。根据iPhone的旋转,我想显示一个控制器。我已经能够通过在appDelegate中放入一些代码来确定手机是否已旋转,但我似乎无法根据旋转加载View Controller。谁能帮我这个?在此先感谢您的帮助。
答案 0 :(得分:0)
我不知道你在AppDelegate中做了什么,或者你的应用程序的结构如何导航,标签栏或其他流程结构,我将提供一种实际在Apple Developer Library中找到的方式并且可以通过多种方式进行操作以满足您的需求:
override func viewDidLoad() {
// Request to turn on accelerometer and begin receiving accelerometer events
UIDevice.currentDevice().beginGeneratingDeviceOrientationNotifications()
// Add an observer to this class that will trigger a method when it receives an "orientation did change" notification
NSNotificationCenter.defaultCenter().addObserver(self, selector: "orientationChanged:", name: UIDeviceOrientationDidChangeNotification, object: nil)
}
我们首先请求此类(有史以来首先显示您希望自动显示的控制器)要求设备开始生成方向通知。接下来,我们在此类中添加一个观察者,以允许我们接受这些通知并在下一个方法时触发它。
override func orientationChanged(notification: NSNotification) {
// create appropriate view controller for new orientation
let newViewController = customViewControllerClass() // or maybe a storyboard view controller Identifier
// present new view controller
self.presentViewController(newViewController, animated: true) { () -> Void in
// maybe some code here to handle this view while we can still access it easily
// we also don't have to have this presentation be animated
}
这里我们创建了在观察者收到通知时运行的方法。在其中,我们创建了我们想要的新视图控制器,然后只需显示它。
虽然这也可以在第二个视图控制器中实现,但是考虑某种控制结构可能是明智的,例如可以为您管理视图的导航控制器。使用其中一个,您可以轻松地将视图控制器实例推送/弹出到导航堆栈。虽然上述方法很简单且有效,但在技术上,并且可能无休止地创建视图并将它们呈现在彼此之上,而基于导航的实现实际上只有两个视图被推出并从导航堆栈弹出,从而节省系统资源。
此外,使用控件结构有条件地加载视图使您有机会首先在系统中查询当前方向,并继续这样做,而不是让各个视图都这样做。只是不要忘记实现上面Apple Developer Library链接中概述的最后一种方法,该方法会删除观察者并停止生成设备方向通知。