当父视图控制器不启用时,swift – 子视图控制器旋转
我正在努力做什么:
由父视图控制器管理的父视图不应旋转. 由Child View Controller管理的子视图应该向所有方向旋转. 我试过的 ParentViewController override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask { return .Portrait } override func shouldAutorotate() -> Bool { return true } fun addChildViewController() { let storyBoard = UIStoryboard(name: "Main",bundle: nil) self.childViewController = storyBoard("Child View Controller") as? ChildViewController self .addChildViewController(self.childViewController!) self.childViewController! .didMoveToParentViewController(self) self.view .addSubview(self.childViewController!.view) self.childViewController!.view.frame = CGRectMake (40,200,400,250) } ChildViewController override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask { return .All } override func shouldAutorotate() -> Bool { return true } Xcode部署信息中的支持方向设置为全部四个. 我得到的 View中没有一个旋转.如果我将父项的旋转设置为all,则所有视图都会一起旋转.所以这是全无的. UPDATE 当我尝试为UIDeviceOrientationDidChangeNotification放置一个观察者并使用UIDevice.currentDevice().orientation使用CGAffaineTransformMakeRotate来旋转childView时,我得到所需的结果.然而,如果我旋转到横向,并尝试拉下通知中心(或者如果我得到一个系统通知),这仍然是纵向(因为应用程序本来还留在肖像),旋转的childView旋转回到肖像,以纪念状态栏/通知/通知中心. 股票iOS相机应用程序是我可以呈现的最好的例子.主画布不会旋转到不同的方向,而状态栏在幕后旋转,使设备旋转.而且,他们自己也在轮流中回顾不同的方向.我正在努力实现这一行为….
在相机应用程序中实现的效果类似于以下组合:
> Technical Q&A QA1890中描述的用于防止旋转视图的技术;和 技术说明说明,自转的底层实现包括直接将应用转换到应用程序的窗口:
请注意,相机应用程序不会选择不使用自动分类:在使用相机应用程序时,“通知中心”和“控制中心”的方向反映了设备方向.相机应用程序中只有特定的视图才会选择不使用自动转换功能.实际上,this answer表示,这样的应用程序通常会使用AVFoundation类(如AVCaptureVideoPreviewLayer和AVCaptureConnection)提供的videoGravity和videoOrientation属性. 您应该采取的方法取决于您是否只希望停止父视图旋转或是否要停止容器视图控制器(如UINavigationController)从旋转(即锁定设备方向). 如果是前者,请使用技术说明中描述的技术来修复父视图的方向,(对于iOS 9),在UIStackView中旋转子视图,并使用axis属性重新排列设备旋转的子视图,或(对于iOS 8)手动旋转设备轮播上的子视图(参见this answer和this sample code). 如果是后者,你所采取的方法是正确的.有关示例代码,请参阅this answer.您需要共享您的代码和有关视图控制器层次结构的更多信息,以便我们诊断涉及Notification Center的怪癖. 附录:Technical Q&A QA1688中已解释了调用toAutorotate和supportedInterfaceOrientations未传播到子视图控制器的原因:
在斯威夫特,你可以override those methods by using extensions. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |