同學們and朋友們大家好!今天我想說一下關於@2x二倍圖的知識,以我所知所見所聞來講述我的理解!別看關於這麼點小知識,有很多初學者在這個上面常會犯錯誤,以下是我的理解:用二倍圖是為了適配iphone4以上的裝置(所謂的retina屏),如果你的項目要適配3gs,那麼你要備兩套圖,一套是一倍圖,比如image.png(320*480),另一套是二倍圖,比如image@2x.png(640*960)。當然你在用的時候,比如UIImage *image = [UIImage imageNamed:@"image.png"],或者UIImage *image = [UIImage imageNamed:@"image"],這兩種方法,在iphone4以上系統會自動去找image@2x.png圖片來顯示。我不知現在用3gs的使用者還有多少,以前寫項目時都要適配3gs,所以就備兩套圖在項目中,沒什麼問題。現在大部分項目都不用再適配3gs了,那麼,你會怎麼備圖在項目中。第一種情況:項目中只有不帶@2x的圖片,image.png(640*960),但是它是雙倍圖,然後你在項目中用時就直接[UIImage imageNamed:@"image.png"],這樣會導致一些問題,當你在用系統的控制項時,比如系統導航條,我設的image.png大小是640*88雙倍圖,
UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:self.viewController]; [nav.navigationBar setBackgroundImage:[UIImage imageNamed:@"image.png"] forBarMetrics:UIBarMetricsDefault];
不管在什麼裝置上,大家看一下效果:3gs和iphone4以上 iphone4以上,系統找圖片時,會直接在後面加上@2x,那麼這個的問題是,系統加image@2x.png找不到圖片,就直接用image.png,用一倍圖來做處理。(也有可能,裝置找不到圖片而無法顯示的,這個是聽說的,我沒碰到過)so,大家可以看出效果來!所以大家在用系統控制項時,設定圖片時考慮一片的問題,看你是不是也犯這個錯誤了。 第二種情況:項目中只有帶@2x的圖片,image@2x.png(640*960)圖片,在項目中所有的圖片後面都加上了@2x,那麼你會怎麼用,我猜,你會這麼用:
UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:self.viewController]; [nav.navigationBar setBackgroundImage:[UIImage imageNamed:@"image@2x.png"] forBarMetrics:UIBarMetricsDefault];
同樣是處理系統的控制項,圖片你這樣用了[UIImage imageNamed:@"image@2x.png"],導致的情況跟上面第一種情況是一樣的。正確的用法[UIImage imageNamed:@"image.png"],即使你的圖片後面跟@2x你也不要這麼用,直接image.png就行了,因為系統會幫你加上@2x。這樣系統在找這張圖的時候是image@2x.png在項目中能夠找到,如果你直接用image@2x.png,系統會找image@2x@2x.png這樣的圖片,那麼在系統找不到的情況下,就直接用image@2x.png圖片來當做一倍圖做處理。所以,只有雙倍圖的情況下,我跟周曉棟的見解是:1、在項目中,無論代碼還是 xib只用不帶@2x的圖片做為名字,就像這樣UIImage *image = [UIImage imageNamed:@"image.png"]2、在真實檔案中必須有@2x 的檔案,不帶@2x 的檔案可有可無(如果有,可以在 xib 中更好的顯示,因為xib 只認不帶@2x 的圖片預覽)