呈现的视图控制器如何从当前方向(尤其是横向)初始化?

Posted

技术标签:

【中文标题】呈现的视图控制器如何从当前方向(尤其是横向)初始化?【英文标题】:How does presented view controller init from current orientation (especially in landscape)? 【发布时间】:2012-10-15 03:35:19 【问题描述】:

我有一个视图控制器,名为 AViewController。 AViewController 中有一个按钮。单击按钮时,我将呈现另一个视图控制器,称为 BViewController。如果 AViewController 是纵向的,它工作得很好。如果方向是横向,那么 BViewController 仍然以纵向初始化,但以横向显示。

这就是问题所在。我想知道如何以当前方向初始化 BViewController。我在 BViewController 的初始化中使用 [UIScreen mainScreen].bounds。但如果设备处于横向,则边界不在横向。我知道将帧从 AViewController 传递给 BViewController,它可能会起作用。但我认为这不是一个好的解决方案。那么有没有更好的办法呢?

呈现BViewController的函数如下:

- (void)BtnClicked

    BViewController *bvc = [[BViewController alloc] init];
    bvc.delegate = self;
    bvc.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    [self presentViewController:movie animated:YES completion:nil];

【问题讨论】:

【参考方案1】:

我仍然不知道如何有效地做到这一点。但我使用一种解决方案在viewDidAppear 中手动调用willAnimateRotationToInterfaceOrientation 方法。

sn-p如下:

- (void)viewDidAppear:(BOOL)animated

    [super viewDidAppear:animated];
    [self willAnimateRotationToInterfaceOrientation:[UIApplication sharedApplication].statusBarOrientation duration:0];

【讨论】:

以上是关于呈现的视图控制器如何从当前方向(尤其是横向)初始化?的主要内容,如果未能解决你的问题,请参考以下文章

如何创建一个同时支持横向和纵向但不在它们之间旋转的视图控制器(保持其初始方向)

呈现视图控制器中的方向更改未更新父视图控制器

iOS 6 中的模态视图控制器强制横向方向

如何将视图初始化为界面方向?

横向 IOS 应用程序在呈现模态视图控制器时抛出异常

IOS 6强制设备方向为横向