2011-04-29 64 views
2

以下是我希望在应用程序中使用的两种布局。如果应用程序从纵向切换到横向时,它会保持UILabels,BOOL和其他对象,那将会很好。由于按钮的位置不同,我不能只在自动旋转时使肖像视图自动调整大小。我也想使用BOOL和右上角的按钮来实现自己的旋转锁定。不同布局的旋转 - iOS 4

我想过使用一个- (空)orientationChanged:(NSNotification)通知presentModalViewController然而这些并没有在对象复制并似乎导致more harm then good and didn't appear to work properly

感谢您的帮助!

Portrait xib Landscape xib

尝试的解决方案:

我加横向视图到ViewController,具有在视图控制器两个视图。我把它连接到我在ViewController的@interface部分添加的UIView * landscapeView下的File's Owner。我在viewDidLoad方法中添加了[self.view addSubview:landscapeView]。然后,我添加了这段代码:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    if (orientationLock) 
     return NO; 
    else { 
     if (interfaceOrientation == UIInterfaceOrientationPortrait) { 
      [landscapeView setHidden:YES]; 
      //[self.view setHidden:NO]; removed 
     } else { 
      //[self.view setHidden:YES]; removed 
      [landscapeView setHidden:NO]; 
     } 
     return YES; 
    } 
} 

但是,这不是正确的解决方案。当我运行模拟器并旋转它时,屏幕没有正确放置。当设备改变方向

Bad Image

回答

1

所有的东西(你的实例变量的值)保持不变。如果你只有一个viewController,并且你同时显示两个orieantation,那么你可以轻松地管理这个。我建议你在nib文件中创建两个UIViews,这样你就可以做所有你想做的事情了。希望你明白我在说什么。让我知道你是否需要帮助。

下面是修改后的代码

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
if (orientationLock) 
    return NO; 
else { 
    if (interfaceOrientation == UIInterfaceOrientationPortrait) { 
     [landscapeView setHidden:YES]; 

    } else { 

     [landscapeView setHidden:NO]; 
    } 
    return YES; 
} 
} 
+0

我可能需要一些更多的帮助,我很初学者。所以我应该把这两个视图合并成一个xib文件。应用程序如何知道何时使用哪个视图? – michaellindahl 2011-04-29 04:20:58

+0

是当设备改变其方向时,你会得到称为shouldRotateToInterfaceOrientation的方法,你可以检查interfaceOrientation == UIInterfaceOrientationPortrait,然后你可以显示纵向视图并隐藏横向视图。希望你能理解 – 2011-04-29 16:24:19

+0

你也可以检查你的国旗的价值,这样如果国旗的价值是肯定的,那么只有显示或隐藏,否则不要做任何事情,一旦国旗变了 – 2011-04-29 16:25:37