3

我正在使用 iOS 8 的 UIPresentationController 编写自定义模式演示文稿。呈现的控制器具有首选的界面方向UIInterfaceOrientationLandscapeLeft

在使用 UIPresentationController 呈现此控制器时,它以纵向显示,忽略呈现的控制器的 preferredInterfaceOrientationForPresentation 方法的结果。

呈现视图控制器

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if let controller = segue.destinationViewController as? UIViewController {
        controller.modalPresentationStyle = .Custom
        controller.transitioningDelegate = self
    }
}

func animationControllerForDismissedController(dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
    return nil
}

func animationControllerForPresentedController(presented: UIViewController, presentingController presenting: UIViewController, sourceController source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
    return nil
}

func presentationControllerForPresentedViewController(presented: UIViewController,
    presentingViewController presenting: UIViewController!,
    sourceViewController source: UIViewController) -> UIPresentationController? {
        return UIPresentationController(presentedViewController: presented, presentingViewController: presenting)
}

呈现的视图控制器

override func preferredInterfaceOrientationForPresentation() -> UIInterfaceOrientation {
    return .LandscapeLeft
}

是否可以让 UIPresentationController 考虑到所呈现控制器的首选接口OrientationForPresentation 方法的结果?

4

1 回答 1

1

我在 Apple 论坛上回答了这个问题,但万一有人偶然发现了 Google 的这个帖子。

预计这不会起作用。据我所知,在演示时处理方向调整的逻辑只存在于用于实现默认演示样式的私有 UIPresentationController 子类中。

顺便说一句,自定义呈现视图控制器的 -supportedInterfaceOrientations 方法通常会被忽略,除非您在呈现控制器子类中覆盖 -shouldRemovePresentersView。

于 2014-11-01T23:11:59.800 回答