iPhone定位pipe理:什么是最有效的方法?

我需要开发一个iPad应用程序,它应该pipe理两种方向模式(横向和纵向)。 根据官方的Apple iOS文档 ,有两种方法可以进行。

第一个是在收到旋转事件时调整视图元素。 主要优点是我们只有一个ViewController – 第二个是为每个方向显示一个特定的ViewController。 所以我们有2个ViewController。

第二种方法似乎很好,但是恐怕会需要ViewController的数量。 更重要的是,ViewControllers中的“数据同步逻辑”必须被复制(或从ViewController中分离出来)才能在两个方向上使用。

我需要开发的应用程序将包含许多“完整的自定义元素”和许多ViewController。

如果任何人有build议或经验的反馈,将非常感激;)

谢谢阅读 !

第二种方法应该是:使用2个不同的视图(一个用于纵向,一个用于横向),并将视图控制器的视图交换到willRotateToInterfaceOrientation: 。 不需要复制你的数据逻辑。

使用哪种方式? 我会说:这取决于。

  • 如果lanscape和肖像模式只有视图的位置/大小不同,我使用第一个(加上你会得到很好的框架变化的animation)
  • 如果风景和肖像太不同,我更喜欢第二个。

我通常通过利用视图中的自动autoresizing技术和视图控制器中的willAutorotateToInterfaceOrientationwillAnimateRotationToInterfaceOrientation方法的实现来解决这个问题。

借助自动调整技术,您可以轻松调整由Apple提供的标准UI元素的大小。 如果您的UI元素没有不可能的布局,您也可以将自动调整技术应用于他们。 您必须在父视图控制器中将autoresizesSubviews属性设置为YES ,并为每个子视图select自动调整行为。 例如,如果你想调整它的大小,保持视图居中,你可以应用autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleRightMargin autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleRightMargin掩码在子视图中。

如果自动调整技术没有办法,那么你需要通过在视图控制器中实现- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration来分别调整每个冲突视图的大小。 如果你有“完整的自定义元素”,你将需要这样调整它们的大小。

在我的特殊经历中,我更喜欢只有一个视图控制器和一个视图来处理所有的方向,并用这两种技术来pipe理它们。

希望这可以帮助你!