本篇文章作為我個人學(xué)習(xí)的記錄過程,僅提供一個思路。
如有描述不正確的地方請批評,謝謝。
利用storyBoard采用tabBarController+navigationBar構(gòu)建項目框架時,在設(shè)置tabBarItem的image和selectImage的時候,圖片不能正常顯示。即未被選中時image為 灰色,選中時selectImage為藍(lán)色,而不是顯示成我們自己切得圖片樣式。
最近接手一個項目,采用的是storyBoard創(chuàng)建tabBar和navigationBar的模式,現(xiàn)要將tabBar的圖片整體切換為另一組圖片,切得圖和尺寸都沒有問題。最開始只是在storyBoard中設(shè)置響應(yīng)的item的image和selectImage,運(yùn)行結(jié)果很不理想,經(jīng)過一系列的排除,最終找到了解決方法。具體過程如下所述。
如圖在Xcode中設(shè)置tabBarItem的image和selectImage:

image和selectImage圖片為:

但是當(dāng)你運(yùn)行的時候就會發(fā)現(xiàn),沒選中的時候是
灰色的,選中之后是藍(lán)色的。形狀和大小雖然是我們自己設(shè)置的圖片,但是顯示的結(jié)果根本不是我們預(yù)想的結(jié)果!
運(yùn)行之后的結(jié)果變成了下面這樣:


這主要是storyBoard默認(rèn)渲染了設(shè)置的圖片,使用UIImage的imageWithRenderingMode:這個方法更改圖片的渲染模式,它可以設(shè)置的模式包括以下幾種:
UIImageRenderingModeAlwaysOriginal:// 不使用渲染模式,顯示圖片原來的樣貌
UIImageRenderingModeAlwaysTemplate:// Always draw the image as a template image, ignoring its color information
UIImageRenderingModeAutomatic:// Use the default rendering mode for the context where the image is used。
在這里我們需要設(shè)置mode為UIImageRenderingModeAlwaysOriginal。設(shè)置的方法有很多,我使用的是新建了一個繼承UITabBarController的tabBarController,在這個tabBarController的viewDidLoad方法里面統(tǒng)一設(shè)置tabBarItem的image和selectImage的mode的。

代碼中之所以直接使用了item.selectImage是因?yàn)樯厦嬲f過已經(jīng)在storyboard中設(shè)置了tabBarItem的selectImage。所以item.selectImage是有值的。所以,可以直接使用item.selectImage調(diào)用imageWithRenderingMode:這個方法。
另外,還可以根據(jù)各自的需求在這個MainTabBarViewController中做不同的處理,比如:節(jié)假日的活動圖,或者動態(tài)更改tabBar的數(shù)量等等。
這樣處理之后,再運(yùn)行app,就可以正常顯示我們自己設(shè)置的圖片了。而禁止渲染效果出現(xiàn)。
運(yùn)行結(jié)果如下:


sadf 暫且放在這里,將獲取的圖片存放在本地并拼接@2x
獲取本地緩存中的圖片
注:2017-06-12新發(fā)現(xiàn)的問題及解決方法:
之前做項目的時候 幾乎沒有調(diào)整Tabbar的圖片,一般都是隨便拿張圖片應(yīng)付一下,但是這次是必須要調(diào)整了,學(xué)長按標(biāo)準(zhǔn)切了60X60的圖片放上去,結(jié)果還是大,我就感覺不對勁了,都說有兩套30X30和60X60 現(xiàn)在我是Retina屏的模擬器為什么還是顯示的那么大呢,仔細(xì)想了一下,可能是我命名的原因,因?yàn)殡m然我用的是60X60但是我并沒有在后面加上@2x ,可能是Xcode自動把這個當(dāng)成了小圖然后自己把這張圖放大之后做了圖標(biāo),于是我就修改了命名,在所有的名字后面加上了@2x 運(yùn)行之后就正常了。