在我的 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;
}