相信iOSer們都被iOS開發(fā)中像素和點(diǎn)這兩個概念困擾過,經(jīng)過一段時間的學(xué)習(xí)和總結(jié),再次為大家講講我的個人理解,希望對和我有同樣困惑的同學(xué)一些幫助...
首先谅年,點(diǎn)(point)是Apple制定的一個獨(dú)立于物理設(shè)備的邏輯坐標(biāo)單位。像素(pixel)是組成圖象的最基本單元肮韧。這兩個概念是不完全等同的融蹂。在iphone4之前的設(shè)備中,一個點(diǎn)等同于一個像素的大小弄企。
像素的理解:
一個像素有多大呢超燃?主要取決于顯示器的分辨率,相同面積不同分辨率的顯示屏拘领,其像素點(diǎn)大小就不相同。
OK约素,這又引入了一個叫做“分辨率”的名詞届良。
分辨率:每一個長度方向上的像素個數(shù) 乘以 每一個寬度方向上的像素個數(shù)的形式。
拿iPhone 6 Plus為例:
iphone 6 Plus 的分辨率為 1242 x 2208 (實(shí)際:1080 × 1920)(pixels)圣猎,屏幕大小為5.5英寸(5.5英寸為對角線長度士葫,屏幕比例為16 :9)
根據(jù)勾股定理就可以算出來屏幕寬和高對應(yīng)的英寸長度。
點(diǎn)的理解:
點(diǎn)送悔,是一個虛擬的單位慢显,并非實(shí)際存在的爪模。
蘋果從iphone4開始在在設(shè)備上使用宣稱的“Retina”屏幕,Retina在英文中荚藻,是視網(wǎng)膜的意思屋灌。
在Retina屏幕中,一個點(diǎn)(point)占據(jù)2個像素的寬度鞋喇。
而在之后的 iphone 6 Plus 和 iphone 7 Plus 中更推出超高像素密度的“Retina”屏幕声滥,像素密度(PPI)達(dá)到 401。
像素密度(PPI): 英文全稱:pixels per inch侦香,即:像素/英寸落塑,也叫像素密度,它是描述在水平的和垂直的方向上罐韩,每英寸距離的圖像包含的像素(pixel)數(shù)目憾赁。因此PPI數(shù)值越高,即代表顯示屏能夠以越高的密度顯示圖像散吵。當(dāng)然龙考,顯示的密度越高,擬真度就越高矾睦。
所以在超高像素密度的 iphone 6 Plus 和 iphone 7 Plus 上晦款,一個點(diǎn)(point)占據(jù)3個像素的寬度(注意:此處僅僅代表單方向的寬度)。
介紹完點(diǎn)和像素的區(qū)別枚冗,下面就分別講一下在開發(fā)中的用法:
UI:
我們親愛的的美工妹子缓溅,在為iOS設(shè)備設(shè)計(jì)時都是用像素(pixels)衡量的。
從@2x 到 @3x赁温,素材的分辨率提高了1.5倍坛怪,例如:@2x的素材為44 x 44 (pixels),那么相應(yīng)的@3x素材大小為66 x 66 (pixels)股囊。
@2x 和 @3x 的由來:
初代iPhone屏幕尺寸為3.5英寸袜匿,PPI為163。
從Retina屏幕開始稚疹,PPI提升到326居灯。
直至Plus系列的PPI為 401。
先再計(jì)算一下iPhone 6 Plus 的像素和點(diǎn):
屏幕點(diǎn)坐標(biāo)系設(shè)計(jì)的寬度為 414 x 736 (points)贫堰,理論對應(yīng)像素應(yīng)該是:1242 x 2208(pixels)穆壕。
但是,iPhone 6 Plus 的物理像素為:1080 x 1920(pixels)其屏,對應(yīng)5.5英寸的屏幕喇勋,所以像素密度就計(jì)算出來就是401。
在iPhone 4 -- iPhone 7產(chǎn)品中偎行,除了iphone 6 Plus 和 7 Plus川背,其他所有iPhone的PPI是一致的贰拿,都是326,用@2x的素材熄云。
但是iphone 6 Plus 和 7 Plus的實(shí)際DPI是401膨更,理論上蘋果應(yīng)該用401 / 326 * @2x=@2.46x的素材。但是這個奇葩的比例對UI來說很難切圖缴允。
所以荚守,蘋果為方便開發(fā)者,用的是@3x的素材练般,然后再縮放到@2.46x上矗漾,實(shí)際上是縮放到2.46/3=82%。
而實(shí)際上分辨率為1080 x 1920(pixels)薄料,1920/2208≈0.87敞贡,1080/1242≈0.87, 所以這樣算下來摄职,物理分辨率和虛擬分比率的比例是87%誊役。
這樣可以是開發(fā)者更方便,比如準(zhǔn)備素材時谷市,字號可以直接調(diào)成@3x的蛔垢。
當(dāng)我們需要使用某張圖片時,只需要在xcode的Assets.xcassets中添加上它的@2x 和 @3x的樣張迫悠,系統(tǒng)會根據(jù)當(dāng)前機(jī)型自動選擇合適的圖片展示啦桌。
看完下面這張圖,你也許能完全理解上面所說的概念了:
比例因子 scale :scale屬性反映了從邏輯坐標(biāo)到設(shè)備屏幕坐標(biāo)的轉(zhuǎn)換及皂,在非視網(wǎng)膜屏幕上,比例因子值為1.0且改,即邏輯坐標(biāo)系中的一個點(diǎn)等于設(shè)備中一個像素(1×1)验烧;在視網(wǎng)膜屏幕中,比例因子值為2.0,即邏輯坐標(biāo)系中的一個點(diǎn)等于設(shè)備中四個像素(2×2);同理又跛,在6plus這種scale為3.0的設(shè)備上碍拆,1point等于9pixels。
控件的尺寸匹配:
說道這慨蓝,應(yīng)該對像素和點(diǎn)有個大概的了解了感混。在開發(fā)中可能還會遇到一些困惑:
假設(shè)一個控件在iPhone 6上的寬度為125(points),對比屏幕寬度375(points)礼烈,125/375 ≈ 33% 弧满,剛好占據(jù)屏幕寬度的三分之一。
同一控件展示在6Plus系列上時此熬,125/414 ≈ 30% 庭呜,還不到屏幕寬度的三分之一滑进,會顯得稍微短一些。
所以募谎,我們在設(shè)計(jì)控件寬度的時候扶关,盡量少使用類似125(points)這樣的死數(shù)據(jù)。
如果實(shí)在有必要使用的話数冬,有一種解決辦法就是:
假設(shè):你的基準(zhǔn)機(jī)型是iphone 6的話节槐,可以自己得出一個比例因子,在通過比例因子去自動適配其他機(jī)型拐纱。
可以在項(xiàng)目中引入這樣一個宏:
#define BASE 375
#define SCALEWITH_2X(WID) \
[UIScreen mainScreen].bounds.size.width / BASE * WID
最后再多說一句铜异,“文”有AutoLayout,“武”有Masonry戳玫,基本上可以滿足絕大多數(shù)布局要求了吧~
以上就是關(guān)于像素和點(diǎn)的一些基本知識了熙掺,若有偏否,歡迎指正咕宿!