让 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 应用成为通用应用的主要内容,如果未能解决你的问题,请参考以下文章
iPhone & iPad:通用应用程序,我的用户需要哪个操作系统版本?