不同布局的旋转 - iOS 4

时间:2011-04-29 00:55:05

标签: objective-c xcode ios4 rotation xib

以下是我想要在我的应用程序中使用的两种布局。如果应用程序从纵向切换到横向,它会保留UILabels,BOOL和其他对象,那将是很好的。因为按钮的位置不同,我不能只在自动旋转时自动调整纵向视图。我还想使用BOOL和右上角的按钮来实现我自己的旋转锁。

我考虑过使用带有 presentModalViewController - (void)orientationChanged:(NSNotification)通知但是这些没有复制到对象上并且似乎导致{{ 3}}

感谢您的帮助!

Portrait xib Landscape xib

尝试解决方案:

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

- (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 个答案:

答案 0 :(得分: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;
}
}