2011-05-21 75 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