我們都知道,iOS因為屏幕分辨率的問題,UID在交付我們iOS開發人員程序配圖的時候,一般是三套圖,分別對應三種不同的分辨率,對不同size的屏幕系統會自動使用不同像素的圖片,我們只需要在命名時給三套圖統一命名@1x、@2x和@3x就可以了。
那么為什么會有三套圖呢?
這是根據iPhone不斷更新而隨之出現的。iPhone4之前的iPhone3G/iPhone3GS甚至於更早的iPhone一二代手機,屏幕特點是一個點位只有一個像素;而iPhone4開始到iPhone6/iPhone6s,使用的就是Retina屏幕了,特點是一個點位放置了兩個像素,這樣在不擴大屏幕的前提下,屏幕的像素就擴大了四倍,分辨率也隨之擴大了整整一倍;而iPhone6 Plus/iPhone6s Plus 帶給我們的並不僅僅是5.5英寸大屏幕的舒適,而提高更顯著的是它的像素數量進一步擴大,屏幕尺寸僅僅從iPhone6/6s的375*667變為414*736,而像素數量則從750*1334增加到1242*2208,分辨率擴大了整整2.74倍。或許從數據上我們能更直觀的看出分辨率的變化。
這就是三套圖的根本原因了,就是因為要匹配蘋果所有機型的屏幕分辨率,也就是像素點位的問題。
目前新接手的項目,項目中所有切圖只有一套圖。因為並不了解公司的習慣問題所以沒有發問,不過最近跟公司的UID姐姐一說,她也疑惑為什么她接手的套圖都只有一套,但也沒有跟老板說。我們都感嘆終於治好了彼此的三套圖強迫症,但這是后話。
昨天合成了老板從外包公司那兒拿回的新功能后,喜滋滋的給老板看,沒想到老板提出了一個我完全沒想到問題,為什么你的分欄控制器上的圖片這么大,看着一點兒也不協調。
哪兒大了?我怎么沒注意?
這是我們的項目TabBar
這是外包給的項目TabBar
貌似確實是有點兒大。強迫症又犯了,這是什么情況,總不是我眼睛出了問題吧。
下面開始嘗試:
1.摘下眼鏡揉了揉眼睛,擦了擦眼鏡,還是原樣。排除眼花了的原因;
2.接下來我就想到之前跟我糾纏了很久的UITabBar上的imageInsets的問題了(詳情見我之前的博文
設置UITabBarController上ImageInsets后點擊不斷縮小)。我的項目(簡稱項目1)的ImageInsets是在storyBoard上直接修改的,而外包公司的項目(簡稱項目2)是手寫的代碼,而且使用最終加到分欄控制器上的UINavigationController調到的tabBarController.tabBar。難道數值上有問題?
經過各種排列組合的嘗試(過程不表),確認使用導航控制器還是視圖控制器對調到的ImageInsets毫無影響,數值上兩者也完全相同都是(0, 0, 0, 0),所以基本排除這方面的問題。
ps:至於調到tabBarItem的imageView后改變frame那是想都別想,沒有這個接口。哎我也是什么招都想過了。或者有其他辦法可以實現改變imageView的frame的,希望分享一下。
3。上面提到了,不管項目1還是項目2都只有一套圖,而我默認都放在了@2x里面。難道與這個有關系?
放到@1x中
放到@3x中
@1x就比較呵呵了。。@3x似乎還可以,不過就是有點兒小了(哎強迫症又犯了)。看來此路行不通啊。
4.只好再一次查看兩者之間的各種區別突然讓我發現了一點:項目1的圖片是72*72的像素,而項目2是60*60。
看到這兒各位應該就明白了吧。
我們習慣上的各種切圖的大小,@1x一般是30*30,@2x相對應的是60*60,@3x則是90*90,分別對應三種分辨率。
而在實際使用當中,由於UIImage會根據UIImageView的frame和自身的縮放屬性來決定縮放比例問題,所以圖片自身的尺寸並不為我們看重,甚至無視了其30*30或60*60的必然性。而當我們無法改變上面的關於UIImageView和UIImage的屬性的時候,我們才會看到切圖自身的屬性。
利用系統的切圖工具將72*72縮放為60*60,問題解決。
最后再說一句,為什么會切出72*72這種尺寸的圖片呢。。難道有什么特殊用法嗎。
不過之后就能收到三套標准圖啦,之前的都過去吧!