亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何檢測iPhone 5(寬屏設備)?

如何檢測iPhone 5(寬屏設備)?

iOS
手掌心 2019-06-13 19:17:55
如何檢測iPhone 5(寬屏設備)?我剛剛升級到XCode4.5GM,并發現您現在可以將‘4“Retina大小應用于您的故事板視圖控制器?,F在,如果我想創建一個運行在iPhone 4和iPhone 5上的應用程序,當然,我必須構建每個窗口兩次,但我還必須檢測用戶是否有一個3.5“或4”屏幕的iPhone,然后應用該視圖。我該怎么做?
查看完整描述

3 回答

?
白豬掌柜的

TA貢獻1893條經驗 獲得超10個贊

首先,您不應該重新構建所有視圖以適應新屏幕,也不應該對不同的屏幕大小使用不同的視圖。

使用自動調整iOS的功能,使您的視圖可以調整,并調整任何屏幕大小。

這不是很難,讀一些文件關于那件事。這會幫你節省很多時間。

iOS 6還提供了這方面的新功能。
請務必閱讀iOS 6 API更改量g蘋果開發者的網站上。
檢查新的iOS 6AutoLayout能力。

也就是說,如果您真的需要檢測iphone 5,您只需依賴于屏幕尺寸.

[ [ UIScreen mainScreen ] bounds ].size.height

iPhone 5的屏幕高度為568。
您可以想象一個宏,以簡化所有這些:

#define IS_IPHONE_5 ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )

使用fabs和epsilon在這里是為了防止精度錯誤,當比較浮點時,就像H2CO3的注釋中指出的那樣。

因此,從現在開始,您可以在標準if/etc語句中使用它:

if( IS_IPHONE_5 ){}else{}

編輯-更好的檢測

正如一些人所說,這只會起作用。探測寬屏而不是真正的iPhone 5。

下一個版本的iPodtouch可能也會有這樣的屏幕,所以我們可以使用另一組宏。

讓我們重命名原來的宏IS_WIDESCREEN:

#define IS_WIDESCREEN ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )

讓我們添加模型檢測宏:

#define IS_IPHONE ( [ [ [ UIDevice currentDevice ] model ] isEqualToString: @"iPhone" ] )#define IS_IPOD  
 ( [ [ [ UIDevice currentDevice ] model ] isEqualToString: @"iPod touch" ] )

這樣,我們就可以確保我們有iPhone型號寬屏,我們可以重新定義IS_IPHONE_5宏:

#define IS_IPHONE_5 ( IS_IPHONE && IS_WIDESCREEN )

還請注意,正如@LearnCocos2D所述,如果應用程序沒有對iPhone 5屏幕進行優化(缺少默認的[email protected]圖像),這個宏將無法工作,因為在這種情況下,屏幕大小仍然是320x480。

我不認為這可能是一個問題,因為我不明白為什么我們會想要檢測到一個非優化的應用程序iphone 5。

重要-iOS 8支持

在IOS 8上,bounds的屬性UIScreen類現在反映了器件取向.
因此,很明顯,前面的代碼是不會開箱即用的。

為了解決這個問題,只需使用新的nativeBounds屬性,而不是bounds,因為它不會隨著方向的變化而改變,因為它是基于縱向向上模式的。
注意.的尺寸nativeBounds是以像素為單位測量的,因此對于iPhone 5來說,高度將是1136而不是568。

如果您的目標也是iOS 7或更低,一定要使用功能檢測,作為調用nativeBounds在iOS 8之前,應用程序會崩潰:

if( [ [ UIScreen mainScreen ] respondsToSelector: @selector( nativeBounds ) ] ){
    /* Detect using nativeBounds - iOS 8 and greater */}else{
    /* Detect using bounds - iOS 7 and lower */}

您可以通過以下方式調整以前的宏:

#define IS_WIDESCREEN_IOS7 ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )
#define IS_WIDESCREEN_IOS8 ( fabs( ( double )[ [ UIScreen mainScreen ] nativeBounds ].size.height - ( double )1136 ) 
< DBL_EPSILON )#define IS_WIDESCREEN      ( ( [ [ UIScreen mainScreen ] respondsToSelector: @selector( nativeBounds ) ] ) 
? IS_WIDESCREEN_IOS8 : IS_WIDESCREEN_IOS7 )

顯然,如果您需要檢測到iPhone 6或6 Plus,請使用相應的屏幕大小。


查看完整回答
反對 回復 2019-06-13
?
SMILET

TA貢獻1796條經驗 獲得超4個贊

真正簡單的解決方案

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){
    CGSize result = [[UIScreen mainScreen] bounds].size;
    if(result.height == 480)
    {
        // iPhone Classic
    }
    if(result.height == 568)
    {
        // iPhone 5
    }}


查看完整回答
反對 回復 2019-06-13
  • 3 回答
  • 0 關注
  • 523 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號