iPhone4採用了一個叫作retina的屏幕,尺寸和老的iphone同樣大,可是分辨率提升了4倍,看起高清的圖來,爽太多了,根本看不到像素點.
對於老的app來講,在iphone4中運行,會自動用4個像素替代原來的一個像素,這樣就不用更改代碼,使得老app能夠天然的在iphone4中運行,可是UI的效果會有些濛濛的,不是最佳的效果,要達到最佳,必須爲原來的圖片資源,從新設計一份640*960的高清版本,這樣才能在iphone4內達到最佳的UI效果~
下面就來簡單總結下在ios4中怎麼樣使用高清圖,首先要了解一些概念:
Points Versus Pixels:
When using native drawing technologies such as Quartz, UIKit, and Core Animation, you specify coordinate values using a logical coordinate space, which measures distances in points. This logical coordinate system is decoupled from the device coordinate space used by the system frameworks to manage the pixels on the screen.
通常程序中使用到的尺寸都是以point來計算的.
在老的iphone中,point和pixel基本沒怎麼去分辨,由於都是1:1的,都是320*480.
可是在iphone4或之後的設備中,這個再也不是1:1的關係,對於iphone4的retina屏幕來講,1point=2pixels,屏幕的最大point的size還是320*480.
接下來就說下怎麼樣使用高清圖:
假設如今有兩附圖Default.png(320*480)和Default@2x.png(640*960)
UIImage *p_w_picpath1 = [UIImage p_w_picpathNamed:@"Default.png"];
UIImage *p_w_picpath2 = [UIImage p_w_picpathNamed:@"Default"];
上面兩行代碼,在ios4中,都會自動根據你的手機分辨率,來自動匹配圖片:
若是是iphone 3G和3GS,調用上面的結果,p_w_picpath1和p_w_picpath2獲得的都是Default.png(320*480)這張圖片,在查看p_w_picpath的size,你會發現是320*480的(按point來計),再看p_w_picpath的scale這個property是1.0,表示實際的1個piont對應了一個像素點,因此圖片的實際像素是(320*scale)*(480*scale)=320*480.
若是是iphone4,返回的結果兩個p_w_picpath都是Default@2x.png(640*960)這張圖,再次查看p_w_picpath的size,你會發現仍然是320*480(points),可是scale是2.0,表示1個point對應圖片上面的兩個像素點,因此圖片的實際像素是(320*scale)*(480*scale)=640*960.
因此,只用給同名的高清圖加上@2x這個後綴,用UIImage的p_w_picpathNamed這個函數調用圖片名(未帶@2x的),就會自動幫你調用合適的圖片,使用起來很方便.
你也可使用,UIImage的initWithContentsOfFile:(須要圖片的完整路徑)函數來load圖片,可是這個不會幫你自動區分圖片,你須要本身根據手機的分辨率來指定調用Default.png仍是Default@2x.png.
能夠作以下一些測試,可以加深印象:
準備Default.png(320*480),Default@2x.png(640*960),DefaultCopy.png(320*480)和Default_Copy@2x.png(640*960)四張圖,分別用p_w_picpathNamed:和initWithContentsOfFile:來調用(直接調用各個文件名:Default.png,Default@2x.png, DefaultCopy.png, Default_Copy@2x.png),而後分別在iphone 3G和iphone 4上面顯示看效果,順便輸出p_w_picpath的size和scale來比較.會對這個問題有更滲入的理解.
舉個例子:
上面提到過在iphone4上面用p_w_picpathNamed函數調Default.png,返回的是Default@2x.png(640*960)這張圖,看起來就會很清楚.
可是若是調用DefaultCopy.png,由於它找不到DefaultCopy@2x.png這張高清圖,只能用原來小size的圖,因此返回仍是DefaultCopy.png(320*480),size是320*480,可是scale是1.0,實際圖像的像素就是(320*scale)*(480*scale)=320*480,顯示效果差,由於圖片像素只有高清的1/4.
以上都是本人的一些簡單的總結,不免會有疏漏不正確,多多包涵.