如何在预编译时检测iPhone / ipad

时间:2012-02-28 01:59:59

标签: ios macros

我想为我的应用定义一些参数,这些参数适用于iPhone和iPad。我想定义使用宏而不是在运行时判断它们。应该是这样的:


#if TARGET_IPHONE_SIMULATOR
#define SCROLL_SIZE_PORTRAIT CGSizeMake(768, 1024)
#define SCROLL_SIZE_LANDSCAPE CGSizeMake(1024, 768)
#else
#define SCROLL_SIZE_PORTRAIT CGSizeMake(320, 460)
#define SCROLL_SIZE_LANDSCAPE CGSizeMake(460, 320)
#endif

然而,这个宏无法区分iPhone和iPad。 还有其他办法吗? 感谢。

2 个答案:

答案 0 :(得分:1)

使用功能:

static inline CGSize scrollSizePortrait()
{
     return [[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad ? CGSizeMake(768, 1024) : CGSizeMake(320, 460);
}

static inline CGSize scrollSizeLandscape()
{
    return [[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad ? CGSizeMake(1024, 768) : CGSizeMake(460, 320);
}

答案 1 :(得分:0)

如果你想创建一个通用的应用程序,这绝对不是正确的方法,因为编译器不知道该应用程序将在哪个设备上运行。

因此,即使您使用宏,也必须在运行时评估

您必须在运行时检查设备,因为这是通用应用程序实际知道(根据定义)它是否在iPhone或iPad上执行的唯一时间。