MvvmCross: Как заставить определенную ориентацию на MvxViewController в iOS 7 на iPhone
В моем приложении для 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) Внутри нового View Presenter, который вы только что создали на шаге 1, переопределите метод CreateNavigationController и используйте новый NavigationController, который вы создали на шаге 2.
Шаг 4) В ViewController вы хотите изменить ориентацию, вы можете изменить его, переопределив метод GetSupportedInterfaceOrientations. Например, на моем VideoPlayerView у меня есть этот код ниже.
public override bool ShouldAutorotate()
{
return true;
}
public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations()
{
return UIInterfaceOrientationMask.AllButUpsideDown;
}