在横向模式下以另一个视图顶部显示横向模式下的模态视图

时间:2014-05-05 23:35:15

标签: ios iphone objective-c uiview

我有一个UIView(A),它以肖像模式显示,并附有一个UIButton。当用户单击该按钮时,第二个UIView(B)被初始化并在UIView A上显示为模态视图。

默认情况下,是否可以将第二个模态UIView配置为以横向模式而不是纵向模式显示?此旋转应以编程方式独立于iPhone / iPad设备的任何实际旋转。

我尝试在分配和显示第二个UIView的方法中使用setStatusBarOrientation更改方向,但这不起作用:

    [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft animated:YES];

下面是打开模态视图的方法:

- (void) showModalView
{
    // get screen dimensions
    CGRect screenRect = [[UIScreen mainScreen] bounds];
    CGFloat screenWidth = screenRect.size.width;
    CGFloat screenHeight = screenRect.size.height;

    // init elements
    UIViewController *overlayVc = [[UIViewController alloc] init];
    UIView        *overlayView  = [[UIView alloc] initWithFrame:CGRectMake(0,0, screenWidth, screenHeight)];
    UIImageView   *bgImgView    = [[UIImageView alloc] initWithFrame:overlayView.bounds];

    // set status bar orientation
    [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft animated:YES];

    // add overlay to view
    [overlayView addSubview:bgImgView];
    [overlayVc setView:overlayView];

    // show modal vc
    [self presentViewController:overlayVc animated:YES completion:nil];
}

这就是我的意思:

foo

非常感谢您提前

1 个答案:

答案 0 :(得分:1)

是。首先,您需要告诉您的应用,您支持横向模式。您可以在项目文件中,在应用目标的常规选项卡下执行此操作。

然后在视图控制器中,您需要实现“配置视图旋转设置”部分下的方法。具体来说,这将是:

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationLandscapeRight
}

- (BOOL)shouldAutorotate
{
    return YES;
}

注意我们返回掩码的supportsInterfaceOrientations函数。

当您以模态方式呈现时,您的视图应自动旋转。您可能还需要在先前的视图控制器中实现相同的方法,以便在返回时知道如何定位自己。