處理iPhone6蟋字、6+標(biāo)準(zhǔn)視圖和放大視圖 & 新增的[UIScreen nativeScale]方法

文章轉(zhuǎn)自:http://openfibers.github.io/blog/2015/03/10/uiscreen-nativescale-method-handle-standard-zoomed/

放大模式

標(biāo)準(zhǔn)模式與放大模式

iPhone6和6+的設(shè)置(Settings)->顯示與亮度(Display & Brightness)->顯示模式(View)都帶有標(biāo)準(zhǔn)模式(Standard)和放大模式(Zoomed)举农。
這個(gè)功能被引入后唉窃,依賴[UIScreen bounds]和[UIScreen scale]并不能完全確定屏幕分辨率是多大惩嘉、用戶選擇了放大試圖還是標(biāo)準(zhǔn)視圖挠阁。比如放大模式下iPhone6讀到的這兩個(gè)屬性和iPhone5是一模一樣的,而放大模式下iPhone6+的[UIScreen bounds]屬性和標(biāo)準(zhǔn)模式下iPhone6的一樣硫朦。
iOS8中蘋果引入了[UIScreen screenScale]贷腕,可以用來區(qū)分不同的顯示模式。

關(guān)于[UIScreen screenScale]
官方文檔給出的解釋則非常惜字如金:
The native scale factor for the physical screen. (read-only)

何為native scale factor? 寫文檔這哥們有點(diǎn)懶啊咬展,妥妥的中國大陸互聯(lián)網(wǎng)公司文檔范兒泽裳,搞不好是本著’不知道上層用戶用得著用不著先開放了再說’的原則做的底層。猜測是物理分辨率與[UIScreen bounds]的比值破婆。光猜不放心诡壁,最好還是做個(gè)實(shí)驗(yàn)看下這個(gè)猜測是不是對的。

CGRect bounds = [[UIScreen mainScreen] bounds];
NSString *screenMode = [[UIScreen mainScreen].coordinateSpace description];
CGFloat scale = [[UIScreen mainScreen] scale];
CGFloat nativeScale = [[UIScreen mainScreen] nativeScale];

NSLog(@"\n bounds: %@\n screen mode: %@\n scale: %f\n native scale: %f", NSStringFromCGRect(bounds), screenMode, scale, nativeScale);

iPhone6標(biāo)準(zhǔn)模式下輸出:

ScreenTest[3441:3088752]
bounds: { {0, 0}, {375, 667} }
screen mode: <UIScreen: 0x155603cd0; bounds = { {0, 0}, {375, 667} }; mode = <UIScreenMode: 0x170021f40; size = 750.000000 x 1334.000000>>
scale: 2.000000
native scale: 2.000000

iPhone6放大模式下輸出:

ScreenTest[3454:3089937]
bounds: { {0, 0}, {320, 568} }
screen mode: <UIScreen: 0x12ee03d40; bounds = { {0, 0}, {320, 568} }; mode = <UIScreenMode: 0x1700256e0; size = 640.000000 x 1136.000000>>
scale: 2.000000
native scale: 2.343750

2.343750是個(gè)啥荠割?1134/568是2.34859154,比較接近了旺矾。而750/320就是2.343750蔑鹦。
再來看iPhone6+標(biāo)準(zhǔn)模式下輸出:

ScreenTest[1876:465146]
bounds: { {0, 0}, {414, 736} }
screen mode: <UIScreen: 0x13ee01840; bounds = { {0, 0}, {414, 736} }; mode = <UIScreenMode: 0x17002b4e0; size = 1242.000000 x 2208.000000>>
scale: 3.000000
native scale: 2.608696

iPhone6+放大模式下輸出:

ScreenTest[1893:466244]
bounds: { {0, 0}, {375, 667} }
screen mode: <UIScreen: 0x13f6021f0; bounds = { {0, 0}, {375, 667} }; mode = <UIScreenMode: 0x170028c20; size = 1125.000000 x 2001.000000>>
scale: 3.000000
native scale: 2.880000

iPhone6+的物理分辨率是1080*1920,1080/414是2.608696箕宙,1080/375是2.880000嚎朽。
需要注意的是此接口從iOS8開始支持。代碼里要用的話記得加個(gè)保護(hù)柬帕。

蘋果希望開發(fā)者們怎樣做哟忍?
從文檔來推斷狡门,UIKit的設(shè)計(jì)者可能覺得這個(gè)接口使用頻率不會很高,以至于文檔里只給出了一句不清晰的解釋锅很,沒說明比值以寬度計(jì)算其馏,也沒給出其他建議。繼續(xù)推斷在UIKit的設(shè)計(jì)者認(rèn)為[UIScreen bounds]和[UIScreen scale]才是寫layout時(shí)主力的檢測分辨率方法爆安,無論是CoreGraphics還是圖片scale選取叛复,都應(yīng)該以[UIScreen scale]為準(zhǔn)。在iPhone6上扔仓,無論標(biāo)準(zhǔn)模式還是放大模式褐奥,scale始終是2,所以繪制和圖片都應(yīng)該選擇2倍大星檀亍撬码;iPhone6+上,無論標(biāo)準(zhǔn)模式還是放大模式版保,scale始終是3呜笑,所以繪制和圖片都應(yīng)該選擇3倍大小。
當(dāng)然UIKit并不是開發(fā)UI的唯一方式找筝,于是[UIScreen nativeScale]有了其存在的更多意義蹈垢,尤其是做偏底層的繪制工作時(shí)。
Over

參考資料: http://blog.csdn.net/xiaoyuanzhiying/article/details/44080667

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末袖裕,一起剝皮案震驚了整個(gè)濱河市曹抬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌急鳄,老刑警劉巖谤民,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異疾宏,居然都是意外死亡张足,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門坎藐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來为牍,“玉大人,你說我怎么就攤上這事岩馍〉锱兀” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵蛀恩,是天一觀的道長疫铜。 經(jīng)常有香客問我,道長双谆,這世上最難降的妖魔是什么壳咕? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任席揽,我火速辦了婚禮,結(jié)果婚禮上谓厘,老公的妹妹穿的比我還像新娘幌羞。我一直安慰自己,他們只是感情好庞呕,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布新翎。 她就那樣靜靜地躺著,像睡著了一般住练。 火紅的嫁衣襯著肌膚如雪地啰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天讲逛,我揣著相機(jī)與錄音亏吝,去河邊找鬼。 笑死盏混,一個(gè)胖子當(dāng)著我的面吹牛蔚鸥,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播许赃,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼止喷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了混聊?” 一聲冷哼從身側(cè)響起弹谁,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎句喜,沒想到半個(gè)月后预愤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡咳胃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年植康,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片展懈。...
    茶點(diǎn)故事閱讀 38,566評論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡销睁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出存崖,到底是詐尸還是另有隱情榄攀,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布金句,位于F島的核電站,受9級特大地震影響吕嘀,放射性物質(zhì)發(fā)生泄漏违寞。R本人自食惡果不足惜贞瞒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望趁曼。 院中可真熱鬧军浆,春花似錦、人聲如沸挡闰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽摄悯。三九已至赞季,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間奢驯,已是汗流浹背申钩。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瘪阁,地道東北人撒遣。 一個(gè)月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像管跺,于是被迫代替她去往敵國和親义黎。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容