大佬教程收集整理的这篇文章主要介绍了iOS:禁用子视图的自动分配,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
UIViewController UIView - UIView - UIImageView (disable rotation) - UIImageView - UIView (disable rotation) - UIView - UIView ...
我想锁定我的一些子视图的方向,同时允许其他人自动旋转和调整大小。我似乎无法想像如何完成这个。
一种方法似乎是在willAnimateRotationToInterfaceOrientation中手动旋转子视图。这不是特别有吸引力,因为SDK正在执行我将要撤消的轮播。
有没有办法简单地禁用子视图的方向更改或其他一些重组层次结构的方法?
这里的微妙之处在于,如果您在同一级别上有两个视图控制器的视图(即通过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,请注明来意。