0

在我的应用程序中,我支持单个 ViewController 的横向和纵向。我可以使用 Autoresize 来支持横向和纵向。但我需要制作不同于肖像的自定义风景。我对 iOS 很陌生。在 google 和 SO 中搜索了很多,但找不到解决方案。

我正在使用Xcode 4.5 和情节提要来制作视图。

如何支持自定义横向和纵向视图?

任何帮助都感激不尽。

4

2 回答 2

2

在你的 .m 文件中试试这个:

- (void)updateLayoutForNewOrientation:(UIInterfaceOrientation)orientation
{
    if (self.interfaceOrientation == UIInterfaceOrientationPortrait || self.interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)
    {
        // Portrait

        [object setFrame:CGRectMake(...)];

        // Do the same for the rest of your objects
    }

    else
    {
        // Landscape

        [object setFrame:CGRectMake(...)];

        // Do the same for the rest of your objects
    }
}

在该函数中,您已经定义了视图中每个对象的位置,包括纵向和横向。

然后您调用该函数以viewWillAppear使其最初工作;视图确定在开始时使用哪个方向:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    [self updateLayoutForNewOrientation:self.interfaceOrientation];
}

另外,当你旋转时:

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration 
{    
     [self updateLayoutForNewOrientation:self.interfaceOrientation];
}

如果我需要关于方向的更多定制外观,这就是我采用的方法。希望这对你有用。

编辑:

如果您在一个 UIViewController 中使用两个 UIView,一个用于纵向,另一个用于横向,您可以将代码的第一部分更改为如下所示:

- (void)updateLayoutForNewOrientation:(UIInterfaceOrientation)orientation
{
    if (self.interfaceOrientation == UIInterfaceOrientationPortrait || self.interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)
    {
        // Portrait

        portraitView.hidden = NO;
        landscapeView.hidden = YES;
    }

    else
    {
        // Landscape

        portraitView.hidden = YES;
        landscapeView.hidden = NO;
    }
}

这个经过编辑的样本和原始样本之间有利有弊。在原始版本中,您必须为每个对象编写代码,在此编辑后的示例中,您只需要此代码,但是,您需要分配两次对象,一次用于纵向视图,另一次用于横向视图。

于 2012-10-12T15:49:01.323 回答
1

您仍然可以使用 Sean 的方法,但由于您有 2 个不同的视图,您可能有 2 个不同的 Xib 文件,因此您可以使用[[NSBundle mainBundle] loadNibNamed:"nibname for orientation" owner:self options:nil]; [self viewDidLoad];. 因为我还没有使用它,所以我不知道这将如何与故事板一起使用,但我在一个需要不同方向布局的应用程序中执行此操作,因此我创建了 2 个 Xib 文件并将它们都连接到 ViewController 所以旋转时会加载相应的 Xib 文件。

于 2012-10-12T16:06:50.500 回答