如何确定视图控制器的界面方向?

时间:2015-05-19 10:48:16

标签: ios orientation

我有2个视图控制器:ViewControllerA和ViewCotrollerB。

ViewControllerA仅支持左/右横向。

这些是ViewControllerA.m中的一些方法:

- (BOOL)shouldAutorotate{
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations{
     return UIInterfaceOrientationMaskLandscape;
}

-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{
     return UIInterfaceOrientationLandscapeRight;
}

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{

    [self settingLayoutForOrient:[[UIApplication sharedApplication] statusBarOrientation]];

}

在ViewControllerA中调用跟随代码时显示ViewControllerB:

ViewControllerB *control = [[ViewControllerB alloc] init];
[self presentViewController:control animated:NO completion:nil];

ViewControllerB支持完全方向。

这些是ViewControllerB.m中的一些方法:

- (BOOL)shouldAutorotate{
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations{
     return UIInterfaceOrientationMaskAll;
}

- (void)didRotateFromInterfaceOrientation:  (UIInterfaceOrientation)fromInterfaceOrientation{

[self settingLayoutForOrient:[[UIApplication sharedApplication] statusBarOrientation]];

}

请帮我回答下面的问题:

  1. 从ViewControllerA和纵向模式下的设备转到ViewControllerB。为什么在第一次ViewControllerB apprear时,状态的方向始终是横向左/右,并且设备是否处于纵向模式?
  2. 2. ViewControllerB第一次出现时,如何在ViewControllerB中获得状态栏的显示方式(纵向,portraitUpsideDown,FaceUp,FaceDown,左侧横向,右侧)?

    感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

如果您使用的是故事板,则可以按照以下步骤操作。

正如你所说,你只需要在Landscape左右方向中查看viewcontrllerA,在所有方向上都需要viewcontrollerB。

为此,您可以按照以下步骤进行操作

首先创建一个UINavigationController类。将它命名为LandscapeNavigationController

创建另一个UINavigationController类。将其命名为FullNavigationController

现在在LandscapeNavigationController.m文件中写下代码。

public partial class MainPage : UserControl
{
    public MainPage()
    {
        InitializeComponent();

        LayoutRoot.MouseRightButtonDown += LayoutRoot_MouseRightButtonDown;
        LayoutRoot.MouseRightButtonUp += LayoutRoot_MouseRightButtonUp;
        LayoutRoot.MouseMove += LayoutRoot_MouseMove;
        SetupContextMenu();
    }

    private void SetupContextMenu()
    {
        if (menu == null)
        {
            menu = new ContextMenu();
            menu.Items.Add("test");
            ContextMenuService.SetContextMenu(this, menu);
        }

    }

    private ContextMenu menu;

    private void LayoutRoot_MouseMove(object sender, MouseEventArgs e)
    {
        var mousePosition = e.GetPosition(this);
        menu.HorizontalOffset = 100 - mousePosition.X;
        menu.VerticalOffset = 100 - mousePosition.Y;
    }

    private void LayoutRoot_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
    {
        menu.IsOpen = true;
    }

    private void LayoutRoot_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
    {
        e.Handled = true;
    }
}

现在在FullNavigationController.m文件中写下代码。

- (BOOL)shouldAutorotate
{
    return NO;
}

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskLandscape;
}

现在使用NavigationController嵌入ViewControllerA,它将具有类LandscapeNavigationController和带有NavigationController的ViewControllerB,它将具有类fullNavigationController。

现在将您的初始视图控制器设置为您的一个NavigationController并运行您的程序。