iphone - iPad/iPhone 多方向最佳实践?

标签 iphone objective-c ipad interface-builder

我想将我的 View 转换为适用于任何方向(特别是因为它推荐用于 iPad)。我一直在使用 IB 来安排事情,但不确定如何最好地进行。

我理想的做法是在 IB 中旋转 View ,重做布局,并将两个方向保存到同一个 XIB,以便 View 在方向更改时自动知道要做什么。这似乎不可能。

我知道当方向改变时我可以在代码中重新排列 View ,但是使用 IB 没有多大意义,因为它对我来说的主要优势之一是将所有丑陋的布局代码从我的逻辑中分离出来。

其他人为此做了什么?他们只是设计他们的 View 以便 UIViewAutoResizing 标志可以适本地处理旋转吗?他们是否有针对每个方向的多个 View 并以某种方式顺利切换这些 View ?

最佳答案

我在这里(以及 StackOverFlow 上关于此主题的其他地方)找到了信息,这让我开始思考我之前的回答。如果您有很多顶级对象,这只会变得乏味。

然后,我想到您可以创建一个“助手”对象,因此我创建了一个项目来演示该技术。基本上,助手为 View 中每个感兴趣的对象都有一个导出。 ViewController 本身有两个 Helper 对象(一个用于 p,一个用于 l),您可以在 NIB 中实例化它们。在方向改变时,您将 View Controller 的助手指针切换到适当的助手,然后更新 self.view。它真的很简单(这篇文章更难)。

那么,你会如何开始呢?好吧,如果您先验地知道您将需要两个单独的 View ,那么它会有所帮助。一旦你知道了,在下面引用的项目中使用 Helper 模板,调整它,将它添加到你的 NIB,然后将帮助连接到纵向 View 中的适当对象。 View Controller 本身只有两个助手的引用,以及一个“curHelper”指针。 Helper ivars 是公共(public)的,因此 View Controller 可以引用诸如“curHelper->label1.text = ... - 成本是单个指针取消引用(也可以只使用属性 - 你的调用)”之类的项目。

此外,您可以直接从任一 View 中的对象连接 IBAction。那么,让我们来看看这个:

  • 创建 Nib
  • 创建一个 Helper 对象,并在 nib 中实例化一个名为 Portrait 的对象
  • 将所有的IBOutlets添加到Helper对象中,然后在dealloc中处理,viewWillUnload
  • 在 View Controller 中正常放置 IBAction
  • 连接 NIB - Helper->Portrait view outlets,到 View Controller 的 Action
  • 在 Portrait 中实现所有功能
  • 添加一个新的 Helper 对象,将其命名为 Landscape
  • 复制当前的纵向 View ,旋转并保存
  • 将景观助手的 socket 连接到新的景观 View (已经为您设置好操作!)

显然您需要从现在开始进行重复更改,但在任何双 Nib 方案中您都必须这样做。在上述技术中,所有导出名称保持不变。

View Controller 需要在收到它时将“viewDidUnload”发送给两个助手,并释放助手(然后释放它们的 socket )。

注意:我只是将其放在一起以查看其外观。如果您想查看代码和一个非常小的演示,可以从 public dot me dot com slash dhoerl 下载它,在 iPhone 文件夹中,名称为 Helpers.zip。如果需要,我会更新这个和这个文本。

关于iphone - iPad/iPhone 多方向最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4253623/

相关文章:

ios - 在后台 3 秒时间间隔后重复调用方法

ios - 字符串中的多个错误

objective-c - 如何在iPad上显示MS Office 2007/2010文件的内容?

iphone - 在 iPad 上运行但在模拟器中没有显示图像

c++ - Cocos2d-x v4.0在使用Xcode 12,Xcode 12.1,Xcode 12.2的iPhone模拟器中崩溃

iphone - CoreData prepareForDeletion 被调用无限次

ios - 如何更改日历swift 3中的时间格式

iphone - UIDocumentInteractionController 不适用于 iOS 6

objective-c - 从 NSString 中删除字符?

iOS 企业计划和 iOS 开发者计划