得到裝置是何種iPhone裝置 + 怎麼獲得啟動頁面圖片,

來源:互聯網
上載者:User

得到裝置是何種iPhone裝置 + 怎麼獲得啟動頁面圖片,

一、前言

  今天做一個功能,需要動態獲得啟動頁,然後根據不同裝置去使用不用的啟動頁圖片。

二、本文  

  常規來說,我們直接判斷是何種裝置,然後通過name去獲得圖片選擇性載入即可。但是實際上遇到的兩個問題。

  第一:如何判斷各種裝置。

  第二:怎麼去拿到啟動頁圖片。

  先看第一個問題,怎麼去判斷各種裝置。原來習慣性的是直接判斷裝置高度。閑著沒事就通過

[UIScreen mainScreen].bounds.size.height

  這個方法去獲得各種裝置的高度,如下:

//iPhone4s 480//iPhone 5 568//iPhone 5s 568//iPhone 6 667//iPhone 6p 736//iPhone 6s 667//iPhone 6sp 736

 

  因此做了一個判斷方法一:

- (NSString *)getCurrentDeviceVersion {    CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height;    if (screenHeight==480) {        //        return nil;        return @"iPhone4/iPhone4s";    }else if (screenHeight==568) {        return @"iPhone5/iPhone5s/iPhone5c";    }else if (screenHeight==667) {        return  @"iPhone6/iPhone6s";    }else if (screenHeight==736) {        return @"iPhone6 plus/iPhone6s plus";    }else {        return @"another";    }}

 

  其實這是一個很low的方法,只是根據高度去判斷,不過這樣也可以去判斷。

  下面來看看方法二:

  首先,我們需要在使用的類裡面匯入:

#import <sys/utsname.h> - (NSString *)getDeviceVersion {    struct utsname systemInfo;    uname(&systemInfo);    NSString *deviceName = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];    if ([deviceName isEqualToString:@"iPhone3,1"] || [deviceName isEqualToString:@"iPhone3,3"]|| [deviceName isEqualToString:@"iPhone4,1"]) { //判斷是否是iPhone4,iPhone4s        return @"iPhone4/iPhone4s";    }else if ([deviceName isEqualToString:@"iPhone5,1"]|| [deviceName isEqualToString:@"iPhone5,2"]||[deviceName isEqualToString:@"iPhone5,3"] || [deviceName isEqualToString:@"iPhone5,4"] || [deviceName isEqualToString:@"iPhone6,1"] || [deviceName isEqualToString:@"iPhone6,2"]) {        return @"iPhone5/iPhone5s/iPhone5c";    }else if ([deviceName isEqualToString:@"iPhone7,1"] || [deviceName isEqualToString:@"iPhone8,2"]) {        return @"iPhone6 plus/iPhone6s plus";    }else if ([deviceName isEqualToString:@"iPhone7,2"] || [deviceName isEqualToString:@"iPhone8,1"]) {        return @"iPhone6/iPhone6s";    }else {   //真機上邊不會走到        return @"another";    }}

 

  方法二主要用到了一個類utsname.h。開啟之後,我們可以發現他就是一個結構體:

struct    utsname {    char    sysname[_SYS_NAMELEN];    /* [XSI] Name of OS */    char    nodename[_SYS_NAMELEN];    /* [XSI] Name of this network node */    char    release[_SYS_NAMELEN];    /* [XSI] Release level */    char    version[_SYS_NAMELEN];    /* [XSI] Version level */    char    machine[_SYS_NAMELEN];    /* [XSI] Hardware type */};

先來看看怎麼去取到

 struct utsname systemInfo;    uname(&systemInfo);    NSString *deviceName = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];

 

  當輸出deviceName的時候,你就會發現不同的裝置將會輸出不同的內容,但是當我們使用模擬器的時候,會輸出:

x86_64

  其實這個是在64-bit Simulator下輸出的。如果我們使用的是32-bit Simulator,那麼輸出的結果就是

i386

  然後我使用iPhone5s進行測試,輸出結果是:

iPhone6,2

  當時比較疑惑,這是什麼情況呢?然後就google了一下。原來這個是裝置的類型。而且不同的裝置類型也不一樣。然後就在這裡發現了下面的內容:(其實這個結果就是裝置類型)

  

//模擬器@"i386"      on 32-bit Simulator@"x86_64"    on 64-bit Simulator//iPod--可能不全面@"iPod1,1"   on iPod Touch@"iPod2,1"   on iPod Touch Second Generation@"iPod3,1"   on iPod Touch Third Generation@"iPod4,1"   on iPod Touch Fourth Generation@"iPod5,1"   on iPod Touch 5th Generation@"iPod7,1"   on iPod Touch 6th Generation//iPhone  --全面了@"iPhone1,1" on iPhone@"iPhone1,2" on iPhone 3G@"iPhone2,1" on iPhone 3GS@"iPhone3,1" on iPhone 4 (GSM)@"iPhone3,2" on iPhone 4@"iPhone3,3" on iPhone 4 (CDMA/Verizon/Sprint)@"iPhone4,1" on iPhone 4S@"iPhone5,1" on iPhone 5 (model A1428, AT&T/Canada)@"iPhone5,2" on iPhone 5 (model A1429, everything else)@"iPhone5,3" on iPhone 5c (model A1456, A1532 | GSM)@"iPhone5,4" on iPhone 5c (model A1507, A1516, A1526 (China), A1529 | Global)@"iPhone6,1" on iPhone 5s (model A1433, A1533 | GSM)@"iPhone6,2" on iPhone 5s (model A1457, A1518, A1528 (China), A1530 | Global)@"iPhone7,1" on iPhone 6 Plus@"iPhone7,2" on iPhone 6@"iPhone8,1" on iPhone 6S@"iPhone8,2" on iPhone 6S Plus//iPad  --不全面@"iPad1,1"   on iPad@"iPad2,1"   on iPad 2@"iPad3,1"   on 3rd Generation iPad@"iPad3,4" on 4th Generation iPad@"iPad2,5" on iPad Mini@"iPad4,1" on 5th Generation iPad (iPad Air) - Wifi@"iPad4,2" on 5th Generation iPad (iPad Air) - Cellular@"iPad4,4" on 2nd Generation iPad Mini - Wifi@"iPad4,5" on 2nd Generation iPad Mini - Cellular@"iPad4,7" on 3rd Generation iPad Mini - Wifi (model A1599)

 

  這裡幾乎包括了所有的iOS行動裝置。

然後就根據這個去判斷了一下

- (NSString *)getDeviceModel {    struct utsname systemInfo;    uname(&systemInfo);    NSString *deviceName = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];    if ([deviceName isEqualToString:@"iPhone3,1"] || [deviceName isEqualToString:@"iPhone3,3"]|| [deviceName isEqualToString:@"iPhone4,1"]) { //判斷是否是iPhone4,iPhone4s        return @"iPhone4/iPhone4s";    }else if ([deviceName isEqualToString:@"iPhone5,1"]|| [deviceName isEqualToString:@"iPhone5,2"]||[deviceName isEqualToString:@"iPhone5,3"] || [deviceName isEqualToString:@"iPhone5,4"] || [deviceName isEqualToString:@"iPhone6,1"] || [deviceName isEqualToString:@"iPhone6,2"]) {        return @"iPhone5/iPhone5s/iPhone5c";    }else if ([deviceName isEqualToString:@"iPhone7,1"] || [deviceName isEqualToString:@"iPhone8,2"]) {        return @"iPhone6 plus/iPhone6s plus";    }else if ([deviceName isEqualToString:@"iPhone7,2"] || [deviceName isEqualToString:@"iPhone8,1"]) {        return @"iPhone6/iPhone6s";    }else {   //真機上邊不會走到        return @"another";    }}

 

  這樣就得到了不同版本的裝置。有興趣的話還可以點這裡(可能需要越獄)

  這樣,第一個問題就結局了。第二個問題是如何獲得當前project的啟動頁面。(不要妄想去通過名字拿,試了,拿不到。)

  後來google了一下:得到如下

//iPhone4/4s:[UIImage imageNamed: @"LaunchImage-700"];////iPhone5/5s/5c: [UIImage imageNamed: @"LaunchImage-700-568h"];////iPhone6: [UIImage imageNamed: @"LaunchImage-800-667h"];////iPhone6 plus 豎屏:[UIImage imageNamed: @"LaunchImage-800-Portrait-736h"];////iPhone6 plus 橫屏:[UIImage imageNamed: @"LaunchImage-800-Portrait-736h"];

 

  意思就是當你是iPhone4/4s的時候,就通過

[UIImage imageNamed: @"LaunchImage-700"];

  來拿到啟動頁面。其他的一樣。

  這樣就拿到了啟動頁面。

  綜合起來解決前言問題的方法就是:

//方法一- (UIImage *)getLaunchImage {    CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height;    if (screenHeight==480) {//        return nil;        return [UIImage imageNamed: @"LaunchImage-700"];    }else if (screenHeight==568) {        return [UIImage imageNamed: @"LaunchImage-700-568h"];    }else if (screenHeight==667) {        return  [UIImage imageNamed: @"LaunchImage-800-667h"];    }else if (screenHeight==736) {        return [UIImage imageNamed: @"LaunchImage-800-Portrait-736h"];    }else {        return [UIImage imageNamed:@"placeH"];    }}/** *  通過系統資訊得到版本 *方法二 *  @return 指定的LaunchImage */- (UIImage *)getLaunchImageByiPhoneType {    struct utsname systemInfo;    uname(&systemInfo);    NSString *deviceName = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];    if ([deviceName isEqualToString:@"iPhone3,1"] || [deviceName isEqualToString:@"3,2"] ||[deviceName isEqualToString:@"iPhone3,3"]|| [deviceName isEqualToString:@"iPhone4,1"]) { //判斷是否是iPhone4,iPhone4s        return [UIImage imageNamed:@"LaunchImage-700"];    }else if ([deviceName isEqualToString:@"iPhone5,1"]|| [deviceName isEqualToString:@"iPhone5,2"]||[deviceName isEqualToString:@"iPhone5,3"] || [deviceName isEqualToString:@"iPhone5,4"] || [deviceName isEqualToString:@"iPhone6,1"] || [deviceName isEqualToString:@"iPhone6,2"]) {        return [UIImage imageNamed: @"LaunchImage-700-568h"];    }else if ([deviceName isEqualToString:@"iPhone7,1"] || [deviceName isEqualToString:@"iPhone8,2"]) {        return [UIImage imageNamed: @"LaunchImage-800-Portrait-736h"];    }else if ([deviceName isEqualToString:@"iPhone7,2"] || [deviceName isEqualToString:@"iPhone8,1"]) {        return [UIImage imageNamed: @"LaunchImage-800-667h"];    }else {   //真機上邊不會走到        return [UIImage imageNamed:@"placeH"];  //這裡我用了一張預設圖片    }}

 

  

三、結語

  如果大家有什麼疑問或者我說的不對的地方儘管提出來。  

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.