iPad和iPad iPhone定位问题

时间:2011-03-30 16:49:33

标签: iphone xcode ipad

我在XCode 4中创建了一个在iPad和iPhone上运行的项目。当显示器旋转时,我想知道控制器旋转的最佳方法是什么。我的一些图像和控件需要更改,以支持不同的方向。

理想情况下,我想有一个单独的nib文件,但我不知道如何切换视图。我知道我可以通过UIInterfaceOrientation等获得方向,但由于我是iDevelopment的新手,我不确定最好的方法。

任何建议和/或示例都会有所帮助!!

谢谢, 贝

1 个答案:

答案 0 :(得分:2)

您可能已经知道的事情:尽可能多地使用自动调整大小的面具。在一个理想的世界里,你会用它们做任何事情。有很多情况你可以,虽然不难想到控制器的例子,你想要更多的控制,你显然有。在代码术语中,显而易见的是实现shouldAutorotateToInterfaceOrientation并确保为支持的方向返回“YES”。

除此之外,您要实现的主要内容是- willAnimateRotationToInterfaceOrientation:duration:。当视图旋转时,它将在动画块中调用,并且只要您以先前不在的方向进入视图控制器,它将用于提供即时效果。重新定位和/或更改您视图中的内容,您可以根据需要进行适当的动画过渡。出于体面动画的目的,重新配置一个视图而不是从一个视图切换到另一个视图要好得多。

从我拥有的项目中减少(并重新格式化StackOverflow上的精简文本区域)示例代码:

- (void)willAnimateRotationToInterfaceOrientation:
              (UIInterfaceOrientation)toInterfaceOrientation 
                                         duration:(NSTimeInterval)duration
{
    if(UIInterfaceOrientationIsPortrait(toInterfaceOrientation))
    {
        nameField.frame = CGRectMake(75, 107, 225, 31);
        nameLabel.frame = CGRectMake(20, 107, 47, 32);

        URLField.frame = CGRectMake(75, 145, 225, 31);
        URLLabel.frame = CGRectMake(20, 145, 47, 32);
    }
    else
    {
        nameField.frame = CGRectMake(75, 107, 155, 31);
        nameLabel.frame = CGRectMake(20, 107, 47, 32);

        URLLabel.frame = CGRectMake(250, 107, 35, 32);
        URLField.frame = CGRectMake(293, 107, 167, 31);
    }
}

类出口连接到几个标签和文本字段,允许用户输入名称和URL。该代码的效果是视图根据横向或纵向从一列切换到两列。

这是一个必须硬编码位置的绑定,但我还没有找到更好的方法。如果您不担心动画改组,更直观的方式可能是在NIB中单独设置两个视图,并在发生时刻添加/删除相关视图。