设备在iOS上旋转时如何处理交换视图

时间:2012-02-24 06:19:49

标签: ios uiview orientation

所以我按照以下教程创建了与设备方向相关的自定义视图:

http://www.theappcodeblog.com/2011/03/30/orientation-change-tutorial-change-the-view-when-the-orientation-changes/

总结本文,作者能够在检测到设备旋转时通过指向XIB文件中的新顶级视图来生成横向和纵向方向的自定义视图。

因此,我采用了复杂的视图层次结构(许多按钮,滑块,视图中的视图),复制顶层的所有内容以创建横向视图。然后为景观视图创建自定义排列。在我的代码检测到横向方向的方法中,我的代码在检测到肖像时指向横向层次结构的顶部和纵向。

这是有效的,除了横向层次结构中的所有IBOutlets(UIView,UIButton等)仍然在纵向视图层次结构中引用它们的等效对象。我在运行时对这些UI元素进行了很多特殊处理,因此我需要IBOutlets,而不仅仅是IBActions。我发现横向视图中复制的UI元素可以指向相同的IBActions,但是它们不能与纵向层次结构中的IBOutlet共享。

我是否必须复制所有对象并让我的代码管理所有内容(找出要使用的对象)?

2 个答案:

答案 0 :(得分:1)

这是一种可能适合您的方法。

如果在需要交换横向视图时正确加载横向笔尖,则可以将视图控制器作为nib文件的所有者传递,并且nib加载程序将覆盖视图控制器&#39 ; s出口基于景观笔尖的连接。

当您需要再次交换纵向视图时,请加载纵向笔尖并将视图控制器作为文件的所有者传递。 nib加载器将再次覆盖视图控制器的插座,这次是基于肖像笔尖中的连接。

你应该在第一次需要笔尖的时候懒洋洋地为每个笔尖创建一个UINib对象,并保持它们以加快后续旋转的加载。

答案 1 :(得分:0)

我使用loadNibNamed解决了它。基本上我要做的是保存所有IBOulet变量的状态(使用非IB变量)和在视图中初始化的其他变量。加载新的Nib后,所有内容都会重置为默认状态。这很烦人,但这似乎是目前解决这个问题的最好方法。