#if确定.h xcode中的设备类型

时间:2011-12-03 23:54:15

标签: ios xcode if-statement preprocessor header-files

我确信这可能非常容易(或者无法完成),但我似乎找不到任何东西。

在我的一个.h文件中,我需要确定该应用程序是在iPad还是iPhone上运行。然后相应地更改#define的值。

理想情况下,我会这样看起来像这样:

#if UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone

#define deltaX 10.0
#define theda  15.0
#define threshHold 267.0

#endif

#if UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad

#define deltaX 78.1
#define theda  67.2
#define threshHold 453.0

#endif

我不知道该使用什么,非常感谢任何帮助。

感谢您的时间!

3 个答案:

答案 0 :(得分:14)

派对有点晚了,但我觉得我会分享对我有用的东西。

一直为我工作的解决方案是在某处定义IS_IPAD和IS_IPHONE

#define IS_IPAD   (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)

然后当需要基于ipad / iphone的其他定义时,做这样的事情

#define deltaX (IS_IPAD? 78: 10)

答案 1 :(得分:9)

可悲的是,你不能这样做,因为在通用应用程序中,相同的代码在iPhone上运行,就像在iPad上运行一样,所以这个决定必须在运行时进行,而不是在编译时进行。

您应该在头文件中声明这些变量,然后根据UI_USER_INTERFACE_IDIOM()的值在运行时设置它们。

答案 2 :(得分:3)

您已经有了确定设备的代码,所以没关系。

我将按以下方式创建您的定义:

#define padDeltaX 10.0
#define phoneDeltaX 78.1
... etc

然后在你的班级档案中:

if (if UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
    // do iPhone processing with the variables
}
else
{
    // must be iPad
}

可替换地:

float variableOne, variableTwo; // etc

if (if UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
    variableOne = phoneDeltaX;
    variableTwo = phoneTheta; // etc
}
else
{
    // must be iPad
    variableOne = padDeltaX;
    variableTwo = padTheta; // etc
}

// now do the shared processing with variableOne, variableTwo etc

希望这有帮助!