在很多時候我們會需要辨識不同的裝置來採取不同的對應措施,這裡指的「裝置」並非 iOS 版本,而是指該機器本身,至於我們要如何辨識這些裝置的 Platform Name,請看以下程式碼說明。
詳細規格
首先先匯入兩個與 System 有關的標頭檔。
#import <sys/types.h>
#import <sys/sysctl.h>
接下來在對應的按鈕事件中鍵入以下程式碼,來取得初步的機器版本。
size_t size;
sysctlbyname("hw.machine", NULL, &size, NULL, 0);
char *machine = (char *)malloc(size);
sysctlbyname("hw.machine", machine, &size, NULL, 0);
NSString *platform = [NSString stringWithCString:machine
encoding:NSASCIIStringEncoding];
//別忘記釋放
free(machine);
//將結果顯示於畫面
[self showMyDevicePlatform:platform];
最後我們將呼叫一個自行定義的函式,用來處理所取得的機器版本並顯示於畫面上,您可能會問為什麼需要這麼麻煩,原因是這裡所取得的「機器版本」和目前「市售的商品名稱」有著很大的出入,以我們目前所收集到的資料可以歸類成下列幾項(2013/2/22)。
機器版本 市售的商品名稱
i386 iOS 模擬器(i386)
x86_64 iOS 模擬器(x86_64)
iPhone1,1 iPhone 1G
iPhone1,2 iPhone 3G
iPhone2,1 iPhone 3Gs
iPhone3,1 iPhone 4
iPhone4,1 iPhone 4s
iPhone5,1 iPhone 5
iPod1,1 iPod touch 1
iPod2,1 iPod touch 2
iPod3,1 iPod touch 3
iPod4,1 iPod touch 4
iPad1,1 iPad
iPad2,1 iPad 2
iPhone 或是 iPad
如果只是單純想要辨識使用的裝置為 iPhone 或是 iPad,就不需要上述這樣麻煩的設定,可以使用下列程式碼來判斷,由使用者介面大小得知目前的裝置(模擬器也適用)。
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
//判斷為 iPhone 介面裝置
}
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
//判斷為 iPad 介面裝置
}
ps:想得知使用者介面大小的詳細資訊,可以參考取得畫面工作區域的大小一文。
模擬器或是實體裝置
另外,在模擬器和實體裝置的辨別上,則可以透過前端處理程式 Preprocessor 或是 UIDevice 來判斷。
#if TARGET_IPHONE_SIMULATOR
NSLog(@"使用為模擬器執行");
#endif
若要判斷實體裝置請使用「!TARGET_IPHONE_SIMULATOR」或是「#else」敘述,切勿使用 TARGET_OS_IPHONE(用來判斷是否是 iOS 應用程式)。
最後,在 UIDevice 方面,則可以透過 modle 所回傳的字串來判斷是實體裝置或是模擬器。
[[UIDevice currentDevice] model]
ps:關於前端處理程式 Preprocessor 或是 UIDevice 的更多資訊,請參考前端處理程式 Preprocessor 一文與關於 UIDevice 的二三事一文。
沒有留言:
張貼留言