ios4支援高解析度的一些總結
2010-08-29 14:16:06標籤:ios4 高清圖 iphone4 retina 原創作品,允許轉載,轉載時請務必以超連結形式標明文章 原始出處 、作者資訊和本聲明。否則將追究法律責任。http://life173.blog.51cto.com/2035365/384735
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 *image1 = [UIImage imageNamed:@"Default.png"];
UIImage *image2 = [UIImage imageNamed:@"Default"];
上面兩行代碼,在ios4中,都會自動根據你的手機解析度,來自動匹配圖片:如果是iphone 3G和3GS,調用上面的結果,image1和image2得到的都是Default.png(320*480)這張圖片,在查看image的size,你會發現是320*480的(按point來計),再看image的scale這個property是1.0,表示實際的1個piont對應了一個像素點,所以圖片的實際像素是(320*scale)*(480*scale)=320*480.如果是iphone4,返回的結果兩個image都是Default@2x.png(640*960)這張圖,再次查看image的size,你會發現仍然是320*480(points),但是scale是2.0,表示1個point對應圖片上面的兩個像素點,所以圖片的實際像素是(320*scale)*(480*scale)=640*960.所以,只用給同名的高清圖加上@2x這個尾碼,用UIImage的imageNamed這個函數調用圖片名(未帶@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)四張圖,分別用imageNamed:和initWithContentsOfFile:來調用(直接調用各個檔案名稱:Default.png,Default@2x.png, DefaultCopy.png, Default_Copy@2x.png),然後分別在iphone 3G和iphone 4上面顯示看效果,順便輸出image的size和scale來比較.會對這個問題有更滲入的理解.舉個例子:上面提到過在iphone4上面用imageNamed函數調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.