HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了iOS:禁用子视图的自动分配大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个支持方向更改的iPad应用程序的嵌套视图层次结构。它看起来类似于以下内容

UIViewController
    UIView
        - UIView
            - UIImageView (disable rotation)
            - UIImageView
            - UIView (disable rotation)
        - UIView
        - UIView
        ...

我想锁定我的一些子视图的方向,同时允许其他人自动旋转和调整大小。我似乎无法想像如何完成这个。

一种方法似乎是在willAnimateRotationToInterfaceOrientation中手动旋转子视图。这不是特别有吸引力,因为SDK正在执行我将要撤消的轮播。

有没有办法简单地禁用子视图的方向更改或其他一些重组层次结构的方法

解决方法

自动归档由视图的UIViewController(shouldAutorotateToInterfaceOrientation :)处理,因此一种方法是排列您的层次结构,以便可视视图由一个视图控制器管理,另一个视图控制器可以进行不可转动的视图。这两个UIViewController的根视图都需要添加到窗口/超级视图中。

这里的微妙之处在于,如果您在同一级别上有两个视图控制器的视图(即通过addSubview添加),则只有第一个视图控制器(通常是窗口的rootViewController)才会接收到shouldAutorotateToInterfaceOrientation:消息。

我自己使用这种方法来实现一个旋转的工具栏,而主视图没有。

Apple’s Technical Q&A QA1688 (“Why won’t my UIViewController rotate with the device?”)谈一谈这个问题。

iOS 6更新:

Autorotation现在使用UIViewController的shouldAotorotate和supportedInterfaceOrientations方法。 shouldAutorotate认情况下返回YES,但请记住,除了rootViewController之外的视图控制器,其视图是窗口的直接子视图,无论如何都不会收到旋转回调。

iOS 6的示例代码

使用“单一视图应用程序”模板创建一个新项目,并确保选中“使用故事板”。我们将使用提供的ViewController类作为旋转视图控制器(如果您喜欢则重命名它),并创建一个名为NonRotaTingViewController的第二个UIViewController子类。然此视图控制器将永远不会收到旋转回调,为了完整性和清晰度,在NonRotaTingViewController.m中添加以下代码

- (BOOL)shouldAutorotate
{
    return NO;
}

在MainStoryboard文件中,拖出一个新的视图控制器对象,并将其类设置为NonRotaTingViewController,并将其Storyboard ID设置为“NonRotaTingVC”。当您在那里时,更改旋转视图控制器视图的背景颜色以清除(非旋转视图将添加到此处),并向每个视图添加标签。在AppDelegate.m中,添加以下代码

#import "NonRotaTingViewController.h"

// ...
// ...

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    NonRotaTingViewController *nonRotaTingVC = [mainStoryboard instantiateViewControllerWithIdentifier:@"NonRotaTingVC"];
    [self.window addSubview:nonRotaTingVC.view];
    return YES;
}

这只是实例化一个非旋转视图控制器,并将其视图直接添加到窗口中(N.b.此时,窗口的rootViewController已经由故事板设置)。

运行项目。旋转设备,并惊叹于一个标签旋转的视线,而另一个停留!

iOS 6之前的示例代码

我在一个项目中做到这一点 – 一个新的基于视图的应用程序将做的很好。添加两个新的视图控制器:RotaTingViewController和NonRotaTingViewController。在他们的每一个笔尖中,我刚刚添加一个标签来描述视图是否旋转。添加以下代码

‘RotaTingViewController.m’

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return YES;
}

‘NonRotaTingViewController.m’

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    if (interfaceOrientation == UIInterfaceOrientationPorTrait) {    // Or whatever orientation it will be presented in.
        return YES;
    }
    return NO;
}

‘AppDelegate.m’

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    RotaTingViewController *rotaTing = [[RotaTingViewController alloc] initWithNibName:@"RotaTingViewController" bundle:nil];
    self.rotaTingViewController = rotaTing;
    [rotaTing release];

    NonRotaTingViewController *nonRotaTing = [[NonRotaTingViewController alloc] initWithNibName:@"NonRotaTingViewController" bundle:nil];
    self.nonRotaTingViewController = nonRotaTing;
    [nonRotaTing release];

    [self.window addSubview:self.rotaTingViewController.view];
    [self.window insertSubview:self.nonRotaTingViewController.view belowSubview:self.rotaTingViewController.view];

    [self.window makeKeyAndVisible];

    return YES;
}

我希望这有帮助。

大佬总结

以上是大佬教程为你收集整理的iOS:禁用子视图的自动分配全部内容,希望文章能够帮你解决iOS:禁用子视图的自动分配所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。