gpt4 book ai didi

iphone - UITabBarController 和旋转

转载 作者:行者123 更新时间:2023-12-03 19:13:17 32 4
gpt4 key购买 nike

我在使用 UITabBarController 时遇到了真正的问题。我追求的结果如下:1)在纵向模式下,一个简单的基于选项卡栏的应用程序(带有导航栏)没什么特别的。2)在横向模式下,我想使用自己的 UIViewController 完全忽略 UITabBar。

我最后尝试的方法(我尝试了很多变体)我无法理解为什么不“工作”如下:

  • 我有一个自定义的 UIViewController (称之为 AA),它应该管理“一切”。
  • 该 Controller 在应用程序启动时添加到窗口,并在其 loadView 中创建两个 Controller :UITabBarController(称为 TBC)和 UILandscapeController(称为 LSC)。然后我将 tabbarcontroller View 添加为 AA View 的 subview 。
  • 现在在 AA 类中,我重写 didRotate blah 或 willRotate blah 并且基本上想在两个 View 之间切换,我的意思是:(伪代码):从纵向到横向:
  • [TBC.view removeFromSuperView];[AA.view addSubview:LSC.view];

    当返回纵向时,将其反转。

    [LSC.view removeFromSuperView];[AA.view addSubview:TBC.view];

    我遇到的大量问题(嗯,它简单地旋转错误,创建了一个真正困惑的界面)是完全无法解释的。看起来 tabbarcontroller View 根本不“喜欢”处于标准 View 层次结构中,而是希望直接附加到屏幕。我想知道实现我的目标的最佳方法是什么以及为什么选项卡栏不喜欢成为 View 的 subview ,

    非常感谢任何提示。

    -t

    最佳答案

    以防万一您仍然需要答案,或者其他人偶然发现了这个问题,我已经做了同样的事情并使其正常工作,但是您必须克服一些困难。为了旋转 UITabBarController 的 View ,您必须做四件事:

    1. 在切换到 View 之前删除状态栏
    2. 将 View 旋转到新框架
    3. 将状态栏添加回 View
    4. 切换到 View 。

    我有一个 RootRotationController 可以执行此操作,如下所示:

    @implementation RootRotationController

    #define degreesToRadian(x) (M_PI * (x) / 180.0)

    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    if ((UIInterfaceOrientationPortrait == interfaceOrientation) || (UIInterfaceOrientationPortraitUpsideDown == interfaceOrientation)) {
    [[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO];
    }
    // Return YES for supported orientations
    return YES;
    }

    - (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration {
    [super willAnimateRotationToInterfaceOrientation:interfaceOrientation duration:duration];
    if (UIInterfaceOrientationLandscapeLeft == interfaceOrientation) {
    self.view = self.landscape.view;
    self.view.transform = CGAffineTransformIdentity;
    self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(-90));
    self.view.bounds = CGRectMake(0, 0, 480, 300);
    } else if (UIInterfaceOrientationLandscapeRight == interfaceOrientation) {
    self.view = self.landscape.view;
    self.view.transform = CGAffineTransformIdentity;
    self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(90));
    self.view.bounds = CGRectMake(0, 0, 480, 300);
    } else if (UIInterfaceOrientationPortrait == interfaceOrientation) {
    mainInterface.view.transform = CGAffineTransformIdentity;
    mainInterface.view.transform = CGAffineTransformMakeRotation(degreesToRadian(0));
    mainInterface.view.bounds = CGRectMake(0, 0, 300, 480);
    [[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO];
    self.view = mainInterface.view;
    } else if (UIInterfaceOrientationPortraitUpsideDown == interfaceOrientation) {
    mainInterface.view.transform = CGAffineTransformIdentity;
    mainInterface.view.transform = CGAffineTransformMakeRotation(degreesToRadian(180));
    mainInterface.view.bounds = CGRectMake(0, 0, 300,480);
    [[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO];
    self.view = mainInterface.view;
    }
    }

    此外,您应该知道 shouldAutorotateToInterfaceOrientation 在将根 Controller 的 View 添加到窗口后立即调用,因此您必须在应用程序委托(delegate)中执行此操作后重新启用状态栏。

    关于iphone - UITabBarController 和旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/549004/

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