2011-05-21 44 views
8

我试图让我的iPhone应用程序与iPad兼容。 在头文件中我设置了一些常量。 由于屏幕较大,我希望在iPad上用于图像的一些常量比在iPhone上大一些。 我发现在互联网上的一些建议,以实现这一点:#基于平台的定义[iPhone或iPad]

#if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
#define imgAmcWidth 656.0f 
#define imgAmcHeight 36.0f 
#else 
#define imgAmcWidth 240.0f 
#define imgAmcHeight 20.0f 
#endif 

这似乎满足我的需求。 不幸的是,xcode 4编译失败,给出了一个错误:'Token'[“在预处理器中无效..'[LLVM GCC 4.2]。 我在做什么错?

回答

5

UI_USER_INTERFACE_IDIOMUIUserInterfaceIdiomPad不是预处理器的东西。他们的iOS的一部分,所以你应该做的:

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
    <define your constants here> 
} else { 
    <define your constants here> 
} 

又见this如果您计划支持以前的iOS版本3.2

+0

Thx - 这就是我的想法。但是这种方法不允许在类之间共享常量吗? – Ghislain 2011-05-22 21:46:02

22

虽然可能不是最完美的解决方案,但以防止重大改写代码我决定使用以下技巧:

#define iPad UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad 
#define imgAmcWidth   (iPad ? 639.0f : 240.0f) 
// etc.. 
+2

你应该在你的宏定义的周围放置圆括号,否则你可能会出现奇怪的优先级或操作数不匹配错误。括号使您的宏“安全”在更多的上下文中使用。 – Dalbergia 2011-11-07 16:23:45

+0

如果此方法用于引用很多的常量,它会使应用程序减速一吨。 – Letrstotheprez 2012-12-09 22:39:38