1

我正在创建在 iPhone 和 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 我该如何继续?

4

2 回答 2

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 的两个单独的二进制文件。它只是一个二进制文件,因此所有与平台相关的决策都必须在运行时做出。

于 2010-12-27T16:58:45.813 回答
1

我使用这个函数来检测 iPad,然后为我的应用程序的所有不同部分编写条件。

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

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

于 2010-12-27T17:34:21.467 回答