让 iPad 应用成为通用应用

Posted

技术标签:

【中文标题】让 iPad 应用成为通用应用【英文标题】:Make iPad app a Universal app 【发布时间】:2010-06-02 05:56:37 【问题描述】:

我有一个 iPad 应用程序,我想制作 Universal,但这似乎非常困难。我已经改变了一些东西,以便我支持这两种构建,但是在构建时,我遇到了很多关于使用 UIPopOvers 的错误。这是我的问题:

为什么UI_USER_INTERFACE_IDIOM() 不能在 3.1.3 上编译或注册? 能否在基于UI_USER_INTERFACE_IDIOM() 的类定义中有条件地包含变量? 如果没有,我应该制作两个不同的视图控制器吗?

谢谢!

【问题讨论】:

【参考方案1】:

为什么 UI_USER_INTERFACE_IDIOM() 不 3.1.3编译还是注册?

UI_USER_INTERFACE_IDIOM 宏仅从 3.2 开始可用。 UIDevice 的 userInterfaceIdiom 属性的限制相同。这意味着您只能从 SDK 3.2 开始获得通用应用程序。

我可以有条件地有变量吗 基于的类定义 UI_USER_INTERFACE_IDIOM()?

没有。 UI_USER_INTERFACE_IDIOM 宏只是获取设备当前 UI 惯用语的运行时快捷方式。

如果不是,我应该做两个不同的吗? 查看控制器?

如果您在两个设备之间有非常不同的 UI,最好使用两个不同的视图控制器,并使用 UI_USER_INTERFACE_IDIOM 宏在运行时(例如在应用程序控制器中)创建正确的视图控制器。

【讨论】:

那么,如果我想要一个通用应用程序,我应该为 3.2 构建吗?我不明白,没有 iPhone 或 iPod touch 可以运行 3.2,所以我根本不能使用 UI_USER_INTERFACE_IDIOM()。我应该为 3.2 构建并且只使用两个 arm 构建设置吗?如何在不运行 3.2 的设备(如 iPhone)上进行测试?我似乎也无法在 3.1.3 上编译,因为在该版本下无法识别 UIPopoverController 是的,通用应用程序仅从 3.2 开始可用。目前,没有 iPhone 运行 SDK 3.2,但 iPad 运行。因此,开发通用应用程序意味着将基础 SDK 设置为 3.2,并将目标 SDK 设置为 3.1+。然后您必须执行运行时检查,以检查 3.2 的类或函数是否可用。我推荐阅读 iPad 编程指南 (developer.apple.com/iphone/library/documentation/General/…),它描述了如何制作通用应用程序。 是的,你必须使用 SDK 3.2 编译UI_USER_INTERFACE_IDIOM(),但它适用于 3.1 及之前的版本。【参考方案2】:

我很幸运,只需选择目标然后转到 Project->Upgrade current target for iPad。

我的应用非常简单,主要由表格视图和网页视图组成,但值得备份并尝试...

是的,您必须将其作为可以针对 3.1 的 3.2 应用提交。*

您还需要做很多其他事情: 确保可以在任何方向查看它(为此第一次被拒绝)。 确保您已创建所有新图像。你必须有 3 或 4 个图标,而不是像 iPhone 应用程序那样只需要一个。 (iPad 图标、iPhone 图标、聚光灯小图标等)。 当然还有适用于商店的 iPad 大小的屏幕截图。

我用来测试它是 iPad 还是 iPhone 的一个非常好的方法是检查设备是否可以使用拆分视图控制器,因为在可预见的未来,没有像 iPhone 这样小屏幕的设备能够使用使用拆分视图控制器。我刚刚为我创建了一个函数:

+(BOOL)isIpad return NSClassFromString(@"UISplitViewController") != nil; 

然后,在我的应用程序中,如果我想根据设备显示不同的内容,我只需检查一下即可:

int width = 150;
if([NabAppDelegate isIpad])
   width = 350;
 else 
   width = 150;

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(5,10,width,25)];

这比我看到的一些建议检查操作系统版本要好得多。

【讨论】:

以上是关于让 iPad 应用成为通用应用的主要内容,如果未能解决你的问题,请参考以下文章

Xcode - 如何制作一个通用的应用程序

iPhone & iPad:通用应用程序,我的用户需要哪个操作系统版本?

将 iPhone 应用升级到通用,现在使用 splitview

将 iPad 应用程序转变为通用应用程序

将通用应用程序转换为 iPad 应用程序

iphone, ipad, 通用应用设计, 基于拆分视图