1.幾個基本概念
Points:
點,iOS開發(fā)中引入的抽象單位糠馆,開發(fā)過程中所有基于坐標系統(tǒng)的繪制都是基于point作為單位。在iPhone2G除嘹,3G写半,3GS時代,point和屏幕上的像素是完全一一對應的尉咕,即320*480(points)對應也是320*480(pixels)叠蝇;
Rendered Pixels:
渲染像素,以point為單位的繪制最終都會渲染成pixels,這個過程被稱為光柵化年缎』诖罚基于point的坐標系乘以比例因子可以得到基于像素的坐標系,高比例因子會有更多的細節(jié)展示单芜,目前的比例因子一般是1x蜕该,2x,3x洲鸠。
Physical Pixels:
物理像素堂淡,是設備屏幕的實際像素。
PPI(pixels-per-inch):
每英寸會有多少物理像素被渲染扒腕。
Screen Size:
屏幕尺寸绢淀,手機屏幕對角線的物理長度
2.不同iOS設備的屏幕參數(shù)
所謂屏幕模式,就是屏幕中一個point有多少個Rendered Pixels渲染瘾腰。
對于2倍屏又稱Retina顯示屏皆的,1point會有2*2Rendered Pixels面積渲染,
對于3倍屏又稱Retina HD顯示屏居灯,1point會有3*3Rendered Pixels面積渲染祭务。
3.開發(fā)中圖片的適配
在iOS開發(fā)中,所有控件的坐標以及控件大小都是以point為單位的怪嫌,比如义锥,開發(fā)中需要展示一張20*20point的圖片,但是要適配所有的iOS設備岩灭,那UI設計師應該怎么提供圖片呢拌倍?
這里就牽扯到屏幕模式的概念,普通屏需要一張20*20px的圖片噪径,Retina屏需要一張40*40px的圖片柱恤,Retina HD屏需要60*60px的圖片,所以UI設計師就需要提供這三種大小的圖片找爱,但是目前iOS設備中普通屏已經(jīng)基本消失了梗顺,所以只需要提供后兩種尺寸圖片就可以了。當然在對提供的圖片命名時也需要遵守以下規(guī)范:
standard:ImageName+device_modifier.filename_extension
Retina? :ImageName+@2x+device_modifier.filename_extension
Retina HD:ImageName+@3x+device_modifier.filename_extension
例如:
icon.png ? ? ? ? ?
icon@2x~iphone.png
icon@3x~ipad.png
按照這種格式之后车摄,不同屏幕的設備會自動加載相應的圖片資源寺谤。
4.適配協(xié)作舉例
第一步仑鸥,視覺設計階段,設計師按寬度750px(iPhone 6)做設計稿变屁,除圖片外所有設計元素用矢量路徑來做眼俊。設計定稿后在750px的設計稿上做標注,輸出標注圖粟关。同時等比放大1.5倍生成寬度1125px的設計稿疮胖,在1125px的稿子里切圖。
第二步闷板,輸出兩個交付物給開發(fā)工程師:一個是程序用到的@3x切圖資源澎灸,另一個是寬度750px的設計標注圖。
第三步蛔垢,開發(fā)工程師拿到750px標注圖和@3x切圖資源击孩,完成iPhone 6(375pt)的界面開發(fā)。此階段不能用固定寬度的方式開發(fā)界面鹏漆,得用自動布局(auto layout)巩梢,方便后續(xù)適配到其它尺寸。
第四步艺玲,適配調(diào)試階段括蝠,基于iPhone 6的界面效果,分別向上向下調(diào)試iPhone 6 plus(414pt)和iPhone 5S及以下(320pt)的界面效果饭聚。由此完成大中小三屏適配忌警。
為什么選擇iPhone 6作為基準尺寸?當面對大中小三種屏幕需要適配的時候秒梳,很容易想到先做好一種屏幕法绵,再去適配剩下兩種屏幕。第一個決定是到底以哪種屏幕作為設計和開發(fā)的基準尺寸酪碘。我們選擇中間尺寸的iPhone 6(750px/375pt)作為基準朋譬,基于幾個原因:
從中間尺寸向上和向下適配的時候界面調(diào)整的幅度最小。375pt下的設計效果適配到414pt和320pt偏差不會太大兴垦。假設以414pt為基準做出很優(yōu)雅的設計徙赢,到320pt可能元素之間比例就不是那么回事了,比如圖片和文字之間視覺比例可能失調(diào)探越。
iPhone 6 plus有兩種顯示模式狡赐,標準模式分辨率為1242x2208,放大模式分辨率為1125x2001(即iPhone 6的1.5倍)钦幔≌硖耄可見官方系統(tǒng)里iPhone 6和iPhone 6 plus分辨率之間就存在1.5倍的倍率關系。很多情況下這兩種尺寸可以用1.5倍直接等比適配鲤氢。
1242x2208這個奇葩的數(shù)值是蘋果官方都不愿意公開宣傳的一個分辨率搀庶,不便于記憶和計算柵格拐纱。640x1136雖然是廣泛應用的一個分辨率,但是大屏時代依然以小尺寸為設計基準顯然不合時宜哥倔,設計師會停留在小屏的視角做設計。所以揍庄,iPhone6的750x1334是最適合基準尺寸咆蒿。
只交付一套設計稿,默認用什么規(guī)則來適配蚂子?
前文提到適配策略是先選擇iPhone 6作為基準設計尺寸沃测,然后通過一套適配規(guī)則自動適配到另外兩種尺寸。這套適配規(guī)則總結(jié)起來就一句話:文字流式食茎,控件彈性蒂破,圖片等比縮放。
控件彈性指的是别渔,navigation附迷、cell、bar 等適配過程中垂直方向上高度不變哎媚;水平方向?qū)挾茸兓瘯r喇伯,通過調(diào)整元素間距或元素右對齊的方式實現(xiàn)自適應。這樣屏幕越大拨与,在垂直方向上可以顯示更多內(nèi)容稻据,發(fā)揮大屏幕的優(yōu)勢。
5.屏幕適配的具體實現(xiàn)
設備屏幕是app和用戶交流的直接途徑买喧,控件是屏幕上展示內(nèi)容的直接載體捻悯,所以屏幕的適配就是對控件在不同尺寸設備上的適配。
在iOS開發(fā)中有三種模式:
第一種是利用拖拽直接在Xcode的可視化文件xib上進行布局淤毛,并添加約束今缚;
第二種是利用代碼直接在頁面文件中進行約束;
第三種是利用屏幕的寬高和坐標系進行坐標定位钱床。
隨著iOS設備屏幕尺寸的多樣化荚斯,第三種有了很大的雞肋,并被絕大多數(shù)開發(fā)者拋棄查牌,第一種使用方便事期、快捷,但是要使用到xib文件纸颜,這就導致在團隊協(xié)作開發(fā)中造成很多不必要的麻煩兽泣,而第二種使用起來略微復雜,但是比較利于團隊協(xié)作開發(fā)胁孙,所以目前廣泛使用的適配約束方式是第一種和第二種唠倦。