iPhone定位pipe理:什么是最有效的方法?
我需要开发一个iPad应用程序,它应该pipe理两种方向模式(横向和纵向)。 根据官方的Apple iOS文档 ,有两种方法可以进行。
第一个是在收到旋转事件时调整视图元素。 主要优点是我们只有一个ViewController – 第二个是为每个方向显示一个特定的ViewController。 所以我们有2个ViewController。
第二种方法似乎很好,但是恐怕会需要ViewController的数量。 更重要的是,ViewControllers中的“数据同步逻辑”必须被复制(或从ViewController中分离出来)才能在两个方向上使用。
我需要开发的应用程序将包含许多“完整的自定义元素”和许多ViewController。
如果任何人有build议或经验的反馈,将非常感激;)
谢谢阅读 !
第二种方法应该是:使用2个不同的视图(一个用于纵向,一个用于横向),并将视图控制器的视图交换到willRotateToInterfaceOrientation:
。 不需要复制你的数据逻辑。
使用哪种方式? 我会说:这取决于。
- 如果lanscape和肖像模式只有视图的位置/大小不同,我使用第一个(加上你会得到很好的框架变化的animation)
- 如果风景和肖像太不同,我更喜欢第二个。
我通常通过利用视图中的自动autoresizing
技术和视图控制器中的willAutorotateToInterfaceOrientation
和willAnimateRotationToInterfaceOrientation
方法的实现来解决这个问题。
借助自动调整技术,您可以轻松调整由Apple提供的标准UI元素的大小。 如果您的UI元素没有不可能的布局,您也可以将自动调整技术应用于他们。 您必须在父视图控制器中将autoresizesSubviews
属性设置为YES
,并为每个子视图select自动调整行为。 例如,如果你想调整它的大小,保持视图居中,你可以应用autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleRightMargin
autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleRightMargin
掩码在子视图中。
如果自动调整技术没有办法,那么你需要通过在视图控制器中实现- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
来分别调整每个冲突视图的大小。 如果你有“完整的自定义元素”,你将需要这样调整它们的大小。
在我的特殊经历中,我更喜欢只有一个视图控制器和一个视图来处理所有的方向,并用这两种技术来pipe理它们。
希望这可以帮助你!