2012-12-04 78 views
0

有什麼方法可以將設備類型作爲#define?我想爲通用應用程序獲得此功能,並且希望能夠知道它是否是iPad,iPhone4或iPhone5。使用預處理器檢測iPhone 5

謝謝!

+1

檢查此問題http://stackoverflow.com/questions/13689895/best-way-to-manage-screen-height-differences-on-iphone-5-and-others – iDev

回答

2
#define IS_WIDESCREEN (fabs((double)[ [ UIScreen mainScreen ] bounds ].size.height - (double)568) < DBL_EPSILON) 
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) 
#define IS_IPHONE_5 (IS_IPHONE && IS_WIDESCREEN) 
#define IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
+0

太棒了!感謝您的快速回復mientus!我一回家就會嘗試。你能向我解釋爲什麼UIScreen和UIDevice可以在運行之前調用嗎?如何使用運行時生成的值定義預處理器? – DeviArt

+2

不要在那裏比較字符串!如果是相應的UIUserInterfaceIdiom,則是手機。 – danyowdee

+1

@DeviArt您的選擇是在運行時或在編譯時進行測試。如果您在編譯時進行測試,那麼在任何有意義的意義上都不會有通用應用程序。 – Tommy

2

反問:

爲什麼要使用宏,當有可用的方法?
宏可以以任何方式轉換爲方法調用,因爲在編譯時您無法知道在運行時遇到什麼設備。

你上運行的設備是一臺iPad,如果它是這麼說的:

BOOL isThisAnIPad = [[UIDevice currentDevice] userInterfaceIdiom] == UIInterfaceIdiomPad; 

除此之外,您自動suffixing them with the correct values組合得到正確的資源與平時@2x視網膜圖形。