作為一名iOS開發(fā)者,以前對這些概念懵懵懂懂横漏,最近看了很多資料記錄下對這些概念的理解谨设,主要以iOS和Android平臺為切入
基本概念
-
px:pixel 像素
- 對于顯示屏來說px是屏幕顯示的最小單位,比如我們常說的1920*1080分辨路屏幕缎浇,只代表了屏幕擁有1920x1080個像素點(diǎn)
- 對于圖片來說px為圖片內(nèi)容的最小單位扎拣。比如一張1920*1080像素的圖片,代表著圖片由2073600個像素點(diǎn)組成素跺,所以只要圖片的分辨率沒有變化二蓝,那圖片的承載內(nèi)容是不變的
-
ppi :pixel per inch 單位英寸(大約2.54cm)內(nèi)的像素數(shù)量,
- ppi計算方式: ppi= 屏幕對角線上的像素點(diǎn)數(shù)/對角線長度 = √ (屏幕橫向像素點(diǎn)^2 + 屏幕縱向像素點(diǎn)^2)/對角線長度
- 對于顯示屏來說指厌,因為PPI是根據(jù)設(shè)備尺寸計算出來的刊愚,所以ppi的大小決定著屏幕的像素密度(ppi越高,屏幕越細(xì)膩踩验,解析力越強(qiáng))鸥诽,比如:物理大小一樣的文字商玫,在PPI更高的屏幕上顯示出來肯定是更細(xì)膩的(因為同樣的大小,有更多的像素來渲染)牡借;對于圖片來說拳昌,如果是像素一樣的圖片,以屏幕的絕對解析力去顯示钠龙,那PPI高的顯示出來的物理大小一定會更小的
- 單純的圖片是不寸在PPI的說法的炬藤,因為沒有實(shí)際大小,如果給圖片一個固定的顯示大小俊鱼,那圖片也可以有ppi這個概念 刻像,也可以理解為圖片的PPI根據(jù)顯示的大小而改變。在設(shè)計軟件中并闲,我們可以動態(tài)的設(shè)置設(shè)計稿的物理大小和ppi 细睡。
-
pt:point 點(diǎn) ,是個物理長度單位
pt這個概念在不同行業(yè)不同系統(tǒng)中的定義是不一樣的帝火,可以理解為- 行業(yè)或者系統(tǒng)為設(shè)計者提供的一個邏輯(設(shè)計)分辨率溜徙,邏輯分辨路和物理分辨率(實(shí)際px)沒有直接的對應(yīng)關(guān)系
- 形象的比喻就是pt就是我們看到的大小單位,和物理大小存在一種比例關(guān)系犀填,但是不同系統(tǒng)會不一樣蠢壹,甚至同一系統(tǒng)都可以不一樣,比如iOS系統(tǒng)的UI設(shè)計規(guī)范就有區(qū)別,后面會講到九巡。
- pt在印刷行業(yè)表示1/72英寸大小,具體的用途我還是沒搞明白
- pt在iOS開發(fā)中就是邏輯分辨率<開發(fā)>的最小單位图贸。至于1pt表示多大的物理大小和1pt代表著多少個像素都是根據(jù)系統(tǒng)的設(shè)計規(guī)則來的,后面會講到冕广。
- pd:dip疏日,Density-independent pixel, 是安卓開發(fā)用的長度單位,也是個無長度單位撒汉。1dp表示在屏幕像素點(diǎn)密度為160ppi時1px長度沟优。這個設(shè)計可以確定在android系統(tǒng)中,1pd在任何設(shè)備的大小都應(yīng)該是一樣的睬辐,但是代表幾個像素卻是不固定的挠阁。至于為什么在iOS和Android開發(fā)的時候會把pd和pt看作是一樣的,之后會具體解釋
- dpi:dots per inch溯饵,每英寸多少點(diǎn)侵俗,一種點(diǎn)密度 。
- 計算方式和ppi一樣丰刊,但是這個點(diǎn)可以有很多理解坡慌,不同的點(diǎn)計算出來的dpi所代表的含義都是不一樣的
- 這個點(diǎn)可以是px、pt藻三、pd洪橘、印刷取樣點(diǎn)、在鼠標(biāo)等電子設(shè)備是上棵帽,點(diǎn)可以理解為最小操作閾值(即設(shè)備會把多遠(yuǎn)的兩個點(diǎn)當(dāng)作一個點(diǎn)來處理)等熄求,不同的理解dpi代表的意思也是不同的。
- 用px去計算得到的dpi=ppi逗概;
- 用pt去計算得到的是單位英寸內(nèi)pt的密度弟晚,那對于iOS以pt為單位來設(shè)計的話,那這個dpi可以理解為單位pt的物理大小關(guān)系逾苫,dpi越高卿城,單位pt的物理大小應(yīng)該就越小,結(jié)果就是1pt的顯示結(jié)果大小不一樣
- 用pd去計算得到的是單位英寸內(nèi)的pd密度铅搓,依據(jù)Android的設(shè)計規(guī)范瑟押,這個dpi應(yīng)該是一樣的。
- 在印刷行業(yè)如果以取樣點(diǎn)去計算星掰,得到的ppi就可以理解為設(shè)備的解析力
- 對于pt為1/72的行業(yè)刷行業(yè)來說多望,那dpi就是固定的72dpi了;
iOS對UI的布局
1.iOS的設(shè)備設(shè)計演變
在iphone3gs的時候氢烘,屏幕的分辨率為320x480px怀偷、ppi =164 ,這時蘋果把iOS系統(tǒng)的邏輯分辨率也設(shè)計為320x480pt 播玖、dpi = 164 椎工,并且后面一值遵循這個UI設(shè)計規(guī)范(1pt 的大小約等于ppi為164的情況下單個像素的大小)。在沒有出現(xiàn)plus及iphonex系列的之前的設(shè)備的都是dpi≈164蜀踏, 1pt 的物理大小是固定的维蒙,但對應(yīng)的像素有可能不一樣,后期出現(xiàn)的plus及iphonex系列的dpi都比164小一點(diǎn)點(diǎn)脓斩,所以1pt的大小也對應(yīng)的有變大一點(diǎn)點(diǎn)木西,但是這變化是很小的,應(yīng)該是蘋果系統(tǒng)級別的大屏適配吧 随静。
2.iphone plus
蘋果的設(shè)計規(guī)范一直是在保持dpi基本不變的情況下,設(shè)備分辨率和邏輯分辨率的是整數(shù)倍的縮放關(guān)系八千,但是在plus系列中,雖然開發(fā)的時候我們使用@3倍關(guān)系做設(shè)計開發(fā)燎猛,但是實(shí)際上他們之間是沒有@3倍關(guān)系的恋捆,實(shí)際的縮放應(yīng)該是@2.6倍,那為什么蘋果不按照規(guī)范來呢重绷,這個我也不知道沸停,但是可以分析一下如果蘋果嚴(yán)格按照@3倍來應(yīng)該是怎樣的。
- 以邏輯分辨率的基礎(chǔ)上x3昭卓,即(414x736)x3 = 1242x2208 作為plus系列手機(jī)的物理分辨率愤钾,這么設(shè)計是ok的瘟滨,符合UI設(shè)計規(guī)范,但是為什么最后使用分辨率更低的1080x1920的能颁,得去問庫克
- 以物理分辨率/3杂瘸,即(1080x1920)/3 = 360x640作為邏輯分辨率,這時候的 dpi = 133 伙菊, 這時候的dpi遠(yuǎn)遠(yuǎn)小于164败玉,違背了設(shè)計規(guī)范,plus只能顯示很小的內(nèi)容镜硕,因為文字圖片啥的都被放大了 运翼,除非開發(fā)者對plus單獨(dú)布局,這是不可能發(fā)正在iOS開發(fā)中的兴枯,哈哈血淌!
- 還可以使用2倍縮放而不是用3倍縮放,即(414x736)x2 = 828x1472 作為plus系列手機(jī)的物理分辨率念恍,這時候設(shè)備的 ppi = 307六剥,這ppi連蘋果提出的最低326都達(dá)不到,肯定不會使用了
- 最后在屏幕大小5.5寸和邏輯分辯率都確定的情況下峰伙,為什么選用1080x1920 疗疟, 那也不得而知,大概率是成本吧瞳氓!
3.iOS的猜想
- iOS因為是閉源策彤,所以它可以通過自己設(shè)定邏輯分辨率來控制設(shè)備的dpi讓開發(fā)者在對UI布局的時候不用考慮不同大小設(shè)備的影響
- iOS通過縮放因子的控制來最簡單的解決開發(fā)者對于不同大小設(shè)備的圖片設(shè)計問題
- 通過控制不同設(shè)備的邏輯分辨率和dpi,蘋果還能在系統(tǒng)級別上做一些顯示調(diào)整匣摘,比如在plus和iphone x系列上的dpi會比iphone其它系列的小一點(diǎn)點(diǎn)店诗,這樣就能讓大屏顯示相同pt內(nèi)容的時候內(nèi)容會大一點(diǎn)點(diǎn)
- 蘋果如果要保持現(xiàn)有的設(shè)計規(guī)范,那它的dpi應(yīng)該不會有大的變化音榜,然后通過尺寸和dpi可以確定邏輯分辨率庞瘸,然后在有縮放倍數(shù)去確定屏幕的物理分辨率,哈哈哈 <純屬個人YY>
Android對UI的布局
1.對Android規(guī)范的理解
可能因為Android的開源屬性和終端太亂太雜赠叼,讓安卓不能像iOS那樣對于不同的設(shè)備在系統(tǒng)級別設(shè)置邏輯分辨率來方便開發(fā)者開發(fā)擦囊,但是Android也有很好的解決方案就是使用pd作為邏輯分辨率,從pd定義可知(幕像素點(diǎn)密度為160ppi時1px長度)嘴办,pd是個固定的物理大小單位瞬场。因此如果以pd計算dpi的話,那dpi在不同設(shè)備上應(yīng)該是一樣的160dpi涧郊,和iOS以dpi≈164基本差不多贯被,所以在Android、iOS設(shè)計開發(fā)的時候才會把他們兩等同。
android圖