gpt4 book ai didi

objective-c - iOS:弹出 View Controller 时更改界面方向

转载 作者:技术小花猫 更新时间:2023-10-29 11:05:29 24 4
gpt4 key购买 nike

除了可以纵向或横向的 View Controller 外,我的应用程序中的所有 View Controller 都只能在纵向方向上工作。

我有一些使用场景如下:

  1. 我将在两个方向上工作的 Controller 推送到 UITabBarController
  2. 用户将方向从纵向更改为横向
  3. 用户按下“后退按钮”

在这些操作之后,应用程序保持横向并且不会自动更改为纵向。

我使用 supportedInterfaceOrientations 控制 View Controller 方向(我使用 iOS 6.0)。我做错了什么?当用户按下后退按钮时应用程序自动将方向更改为允许时,如何获得正确的行为?谢谢解答!

最佳答案

在 iOS 6(可能更早版本)中,如果设备旋转时 View Controller 在屏幕外,它不会收到任何通知。当它成为顶 View Controller 时,它也不会被发送 willAnimateRotationToInterfaceOrientation:duration:

您需要跟踪 View Controller 的当前方向并检查 viewWillAppear: 中的设备方向。如果它们不同,您可以使用 willAnimateRotationToInterfaceOrientation:duration: 来正确设置它。

由于这是您可能经常做的事情,您可能希望创建一个通用的父类(super class),您的 View Controller 从中继承。

一个典型的解决方案是:

@implementation MyHandlesOffscreenRotationController
{
BOOL isShowingPortrait;
}

- (void) viewDidLoad
{
[super viewDidLoad];

isShowingPortrait = UIInterfaceOrientationIsPortrait(
[[UIApplication sharedApplication] statusBarOrientation]);
}


- (void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];

BOOL currIsPortrait = UIInterfaceOrientationIsPortrait(
[[UIApplication sharedApplication] statusBarOrientation]);

if ((isShowingPortrait && !currIsPortrait) ||
(!isShowingPortrait && currIsPortrait)) {
[self willAnimateRotationToInterfaceOrientation:
[[UIApplication sharedApplication] statusBarOrientation]
duration:0.0f];
}
}

@end

关于objective-c - iOS:弹出 View Controller 时更改界面方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14070493/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com