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

时间:2011-03-16 16:18:04

标签: iphone ios ipad uiviewcontroller orientation

我需要开发一个iPad应用程序,它应该管理两种方向模式(横向和纵向)。 根据{{​​3}},有两种方法可以继续。

- 第一个包括在收到旋转事件时调整视图元素。主要优点是我们只有一个ViewController - 第二个包括为每个方向显示特定的ViewController。因此,我们有2个ViewControllers。

第二种方法似乎很好,但我担心需要的ViewController数量。更重要的是,ViewControllers中的“数据同步逻辑”必须复制(或与ViewController隔离)才能在两个方向上使用。

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

如果有人有建议或经验反馈,我们将非常感激;)

感谢您的阅读!

2 个答案:

答案 0 :(得分:3)

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

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

  • 如果景观和肖像模式的区别仅在于视图的位置/大小,我会使用第一个(加上你会得到很好的动画效果)
  • 如果风景和肖像太不相同,我更喜欢第二个。

答案 1 :(得分:1)

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

使用自动调整技术,您可以轻松调整Apple提供的标准UI元素的大小。如果您的UI元素没有不可能的布局,您也可以将自动调整技术应用于它们。您必须在父视图控制器中将autoresizesSubviews属性设置为YES,并为每个子视图选择自动调整行为。例如,如果您希望将视图调整到右侧以保持视图居中,则可以在子视图中应用autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleRightMargin蒙版。

如果自动调整技术不起作用,那么您需要通过在视图控制器中实现- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration来单独调整每个冲突视图的大小。如果您有“完全自定义元素”,则需要以这种方式调整它们的大小。

根据我的特殊经验,我更喜欢只有一个视图控制器和一个视图用于所有方向,并使用这两种技术进行管理。

希望这能帮到你!

相关问题