支持多种方向的最简单方法?当应用程序处于横向模式时,如何加载自定义NIB?

我有一个想要支持多种方向的应用程序。我有两个要使用的.xib文件myViewController.xib,它们myViewControllerLandscape.xib. myViewController.xib存在于project / Resources中,并且myViewControllerLandscape.xib存在于根项目目录中。


我想做的是使用单独的NIB (myViewControllerLandscape.xib)进行旋转。我尝试在viewDidLoad like中检测旋转:


if((self.interfaceOrientation == UIInterfaceOrientationLandscapeLeft) || (self.interfaceOrientation == UIInterfaceOrientationLandscapeRight))

 {

  NSLog(@"Landscape detected!");

  [self initWithNibName:@"myViewControllerLandscape" bundle:nil];


 }

但是我可以在gdb中看到,当应用程序在横向设备上启动时,这不会执行。NSLog消息不会触发。为什么是这样?我做错了什么?


另外,如果我将initWithNibName函数调用显式放入viewDidLoad方法中,则该nib不会加载,并继续显示myViewController.xib文件。我的电话怎么了?我应该指定捆绑商品吗?


谢谢!


开心每一天1111
浏览 505回答 3
3回答

12345678_0001

您必须加载一个视图,然后检查方向并在需要时加载另一个视图。shouldAutorotateToInterfaceOrientation:如果要旋转,则返回“是”来检查方向。我使用导航控制器来管理过渡。如果我具有人像视图并且设备旋转,则我推动风景视图,然后在返回肖像时弹出风景视图。编辑:我应该在shouldAutorotateToInterfaceOrientation中为所有方向返回YES,但是在应用启动时会调用此方法吗?您是否将视图推入此功能?方向常数不是您查询的全局变量,而是系统发送给控制器的消息的一部分。因此,在加载视图控制器之前,您无法轻松检测方向。相反,您可以硬接线该应用程序,使其以特定的方向(通常是纵向)开始,然后立即旋转。(请参阅移动Safari。它始终以纵向开始,然后旋转为横向。)这是我用来交换人像和风景视图的两种方法。所有三个视图控制器都具有此方法:- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {    // Return YES for supported orientations    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);}肖像有:- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {    if (toInterfaceOrientation==UIInterfaceOrientationLandscapeRight) {        [self.nav pushViewController:rightLVC animated:NO];    }    if (toInterfaceOrientation==UIInterfaceOrientationLandscapeLeft) {        [self.nav pushViewController:leftLVC animated:NO];    }}每个景观控制器具有以下功能:- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {    if (toInterfaceOrientation==UIInterfaceOrientationPortrait) {        [self.nav popViewControllerAnimated:NO];    }该应用程序以纵向启动。如果设备的方向为横向,则按适当的横向。当设备旋转回纵向时,它将弹出风景。对于用户而言,它看起来像是同一视图将其自身重组为不同的方向。

森栏

我稍加修改,以允许在肖像或风景中初步装入笔尖- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{    if( !nibNameOrNil )     nibNameOrNil = [self nibNameRotated:[[UIApplication sharedApplication] statusBarOrientation]];    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];    return self;}- (NSString*) nibNameRotated:(UIInterfaceOrientation)orientation{    if( UIInterfaceOrientationIsLandscape(orientation))     return [NSString stringWithFormat:@"%@-landscape", NSStringFromClass([self class])];    return [NSString stringWithFormat:@"%@", NSStringFromClass([self class])];}-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{    NSString *nibname = [self nibNameRotated:toInterfaceOrientation];    [[NSBundle mainBundle] loadNibNamed:nibname owner:self options:nil];    [self viewDidLoad];}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

iOS