iPhone - 如何在通用应用程序中使用#define

时间:2010-12-27 16:52:29

标签: iphone universal-binary

我正在创建运行oniphone和ipad的通用应用。 我正在使用#define来创建CGRect。我想使用两种不同的#define - 一种用于iPhone,另一种用于iPad。 如何声明它们以便通用应用程序选择正确的应用程序..........

我想我要更新一点描述以避免混淆。 我有一个WPConstants.h文件,我将声明所有#define如下所示

#define PUZZLE_TOPVIEW_RECT CGRectMake(0, 0, 480, 100)
#define PUZZLE_MIDDLEVIEW_RECT CGRectMake(0, 100, 480, 100)
#define PUZZLE_BOTTOMVIEW_RECT CGRectMake(0, 200, 480, 100)

以上是iphone的。同样对于iPad我想要有不同的#define 我该如何进一步处理?

2 个答案:

答案 0 :(得分:2)

根据Apple的建议,使用

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { ... }
else { ... }

编写特定于平台的代码。使用三元?:运算符,您还可以将其合并到#define

#define MyRect (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? CGRectMake(0,0,1024,768) : CGRectMake(0,0,480,320))

如果您想使用条件编译来确定代码中应包含哪两个#define语句,则不能:通用应用程序不包含两个单独的iPhone和iPad二进制文件。它只是一个二进制文件,因此所有与平台相关的决策都必须在运行时完成。

答案 1 :(得分:1)

我使用此功能来检测iPad,然后为我的应用程序的所有不同部分编写条件。

#ifdef UI_USER_INTERFACE_IDIOM
    #define isPad() (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#else
    #define isPad() NO
#endif

此外,您还可以为iPhone / iPad加载不同的xib文件。