第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

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

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

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

3 回答

?
白豬掌柜的

TA貢獻(xiàn)1893條經(jīng)驗(yàn) 獲得超10個(gè)贊

首先,您不應(yīng)該重新構(gòu)建所有視圖以適應(yīng)新屏幕,也不應(yīng)該對(duì)不同的屏幕大小使用不同的視圖。

使用自動(dòng)調(diào)整iOS的功能,使您的視圖可以調(diào)整,并調(diào)整任何屏幕大小。

這不是很難,讀一些文件關(guān)于那件事。這會(huì)幫你節(jié)省很多時(shí)間。

iOS 6還提供了這方面的新功能。
請(qǐng)務(wù)必閱讀iOS 6 API更改量g蘋(píng)果開(kāi)發(fā)者的網(wǎng)站上。
檢查新的iOS 6AutoLayout能力。

也就是說(shuō),如果您真的需要檢測(cè)iphone 5,您只需依賴(lài)于屏幕尺寸.

[ [ UIScreen mainScreen ] bounds ].size.height

iPhone 5的屏幕高度為568。
您可以想象一個(gè)宏,以簡(jiǎn)化所有這些:

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

使用fabs和epsilon在這里是為了防止精度錯(cuò)誤,當(dāng)比較浮點(diǎn)時(shí),就像H2CO3的注釋中指出的那樣。

因此,從現(xiàn)在開(kāi)始,您可以在標(biāo)準(zhǔn)if/etc語(yǔ)句中使用它:

if( IS_IPHONE_5 ){}else{}

編輯-更好的檢測(cè)

正如一些人所說(shuō),這只會(huì)起作用。探測(cè)寬屏而不是真正的iPhone 5。

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

讓我們重命名原來(lái)的宏IS_WIDESCREEN:

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

讓我們添加模型檢測(cè)宏:

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

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

#define IS_IPHONE_5 ( IS_IPHONE && IS_WIDESCREEN )

還請(qǐng)注意,正如@LearnCocos2D所述,如果應(yīng)用程序沒(méi)有對(duì)iPhone 5屏幕進(jìn)行優(yōu)化(缺少默認(rèn)的-568h@2x.png圖像),這個(gè)宏將無(wú)法工作,因?yàn)樵谶@種情況下,屏幕大小仍然是320x480。

我不認(rèn)為這可能是一個(gè)問(wèn)題,因?yàn)槲也幻靼诪槭裁次覀儠?huì)想要檢測(cè)到一個(gè)非優(yōu)化的應(yīng)用程序iphone 5。

重要-iOS 8支持

在IOS 8上,bounds的屬性UIScreen類(lèi)現(xiàn)在反映了器件取向.
因此,很明顯,前面的代碼是不會(huì)開(kāi)箱即用的。

為了解決這個(gè)問(wèn)題,只需使用新的nativeBounds屬性,而不是bounds,因?yàn)樗粫?huì)隨著方向的變化而改變,因?yàn)樗腔诳v向向上模式的。
注意.的尺寸nativeBounds是以像素為單位測(cè)量的,因此對(duì)于iPhone 5來(lái)說(shuō),高度將是1136而不是568。

如果您的目標(biāo)也是iOS 7或更低,一定要使用功能檢測(cè),作為調(diào)用nativeBounds在iOS 8之前,應(yīng)用程序會(huì)崩潰:

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

您可以通過(guò)以下方式調(diào)整以前的宏:

#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 )

顯然,如果您需要檢測(cè)到iPhone 6或6 Plus,請(qǐng)使用相應(yīng)的屏幕大小。


查看完整回答
反對(duì) 回復(fù) 2019-06-13
?
SMILET

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊

真正簡(jiǎn)單的解決方案

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


查看完整回答
反對(duì) 回復(fù) 2019-06-13
  • 3 回答
  • 0 關(guān)注
  • 519 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)