3

在我的 iOS 7 应用程序上,我只允许整个应用程序在“支持的设备方向”上使用“纵向”,除非我需要在“视频播放器”视图上允许“横向”方向。如何使用 MvvmCross 或 MvxViewController 做到这一点?我试图设置那些 ShouldAutorotate()、GetSupportedInterfaceOrientations() 方法,它没有做任何事情。它保持锁定在“视频播放器”视图的纵向模式。有谁知道在视图上设置方向的正确方法是什么?

 public class VideoPlayerView : MvxViewController
 {
    public override bool ShouldAutorotate()
    {
        return true;
    }

    public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations()
    {
        return UIInterfaceOrientationMask.AllButUpsideDown;
    }

    public override UIInterfaceOrientation PreferredInterfaceOrientationForPresentation()
    {
        return UIInterfaceOrientation.LandscapeLeft;
    }

    public override void ViewDidLoad(bool animated)
    {
        Title = "Video";

        base.ViewDidLoad(animated);
    }    

}

更新:我想出了如何解决这个问题。

步骤 1) 对于 mvvmcross,您必须设置一个新的 ViewPresenter,并继承自 MvxModalNavSupportTouchViewPresenter

步骤 2) 使用以下代码创建一个继承自 UINavigationController 的新导航控制器

            public override bool ShouldAutorotate()
            {
                return TopViewController.ShouldAutorotate();
            }

            public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations()
            {
                var orientation = TopViewController.GetSupportedInterfaceOrientations();
                return orientation;
            }

步骤 3) 在您刚刚在步骤 1 中创建的新 View Presenter 中,覆盖 CreateNavigationController 方法并使用您在步骤 2 中创建的新 NavigationController。

步骤 4) 在要更改方向的 ViewController 上,可以通过覆盖 GetSupportedInterfaceOrientations 方法来更改它。例如,在我的 VideoPlayerView 上,下面有这些代码。

    public override bool ShouldAutorotate()
    {
        return true;
    }

    public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations()
    {
        return UIInterfaceOrientationMask.AllButUpsideDown;
    }
4

0 回答 0