MvvmCross: Jak wymusić określoną orientację na MvxViewController w iOS 7 na iPhone
W mojej aplikacji iOS 7 zezwalam na „Portret” tylko w „Obsługiwanej orientacji urządzenia” dla całej aplikacji, z wyjątkiem tego, że muszę zezwolić na orientację „Krajobraz” w widoku „Odtwarzacz wideo”. Jak mogę to zrobić za pomocą MvvmCross lub MvxViewController? Próbowałem ustawić te metody ShouldAutorotate (), GetSupportedInterfaceOrientations (), ale nic nie robi. Pozostaje zablokowany w trybie Portret dla widoku „Odtwarzacz wideo”. Czy ktoś wie, jaki jest właściwy sposób ustawienia orientacji w widoku?
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);
}
}
AKTUALIZACJA: Zorientowałem się, jak rozwiązać ten problem.
Krok 1) W przypadku mvvmcross musisz skonfigurować nowy ViewPresenter z dziedziczeniem z MvxModalNavSupportTouchViewPresenter
Krok 2) Utwórz nowy kontroler nawigacji dziedziczący z kontrolera UINavigationControl za pomocą następującego kodu
public override bool ShouldAutorotate()
{
return TopViewController.ShouldAutorotate();
}
public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations()
{
var orientation = TopViewController.GetSupportedInterfaceOrientations();
return orientation;
}
Krok 3) W nowym widoku prezentera, który właśnie utworzyłeś w kroku 1, zastąp metodę CreateNavigationController i użyj nowego urządzenia NavigationController utworzonego w kroku 2.
Krok 4) Na kontrolerze ViewController chcesz zmienić orientację, możesz ją zmienić, zastępując metodę GetSupportedInterfaceOrientations. Na przykład na moim VideoPlayerView mam poniższy kod.
public override bool ShouldAutorotate()
{
return true;
}
public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations()
{
return UIInterfaceOrientationMask.AllButUpsideDown;
}