Xcode - 使用XIB锁定除一个视图外的所有视图

时间:2014-04-05 19:44:35

标签: ios objective-c xcode landscape-portrait

我需要一些帮助。

我目前正在xcode中执行一个应用程序,我需要在纵向模式下锁定所有视图,但我有第二个视图控制器需要进入横向,因为我正在使用mediaplayer框架来显示视频需要在风景中。

我一直在寻找这个,大约一个星期了,仍然无法解决问题。

我很感激提前帮助。

1 个答案:

答案 0 :(得分:2)

这有两个方面。 1.如何按需要锁定每个视图控制器的方向。

但仅此一项不会旋转设备。当您处于纵向状态并且要显示的下一个视图控制器用于横向时,它仍将以纵向显示。您可以将设备转为移动设备,然后控制器将相应地旋转。一旦进入景观,它就会固定在风景中,不能再旋转。 当你回到你的肖像控制器时,它会以风景呈现......

所以,2。你需要旋转设备。

Pont 1很容易。

在所有修复肖像的控制器中实现此功能:

- (BOOL)shouldAutorotate
{
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

并为横向控制器实现此功能:

- (BOOL)shouldAutorotate
{
    return YES;
}


- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskLandscape;
}

<强> 2。对于下一步,您需要应用技巧。 您无法以编程方式转动设备。实现这一目标的唯一方法是旋转状态栏。之后,下一个模态(!)视图控制器以新方向呈现。这不适用于推送导航堆栈上的控制器。 诀窍是以模态方式呈现任何(空)视图控制器并立即将其删除。现在设备已转动,您可以将视图控制器推送到堆栈。 这是我前几天使用的代码:

// Fetch the status bar from the app and set its orientation as required. 
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait animated:YES];

// Create an empty view controller, present it modally and remove it directly afterwards
UIViewController *mVC = [[UIViewController alloc] init];
[self presentModalViewController:mVC animated:NO];
[self dismissModalViewControllerAnimated:NO];
// Now the device is rotated to the desired orientation. Go from there.

如果你正在使用模态视图控制器,那么它当然有点简单。