【iOS】我為什么不用阿里的iconfont

一、需求背景

  • 截止到寫這個的某個下午,開發(fā)iOS已經(jīng)兩年。最近項目搞模塊組件(失敗了一次,還將繼續(xù)),業(yè)務(wù)代碼也不少。稍微空下來一兩天,在網(wǎng)上看到iconfont,于是就想試一下。
  • 其實第一條就是扯淡,任何一項技術(shù)的開始都是現(xiàn)實中任務(wù)來推進的,當有了需求后就有了新技術(shù)(于自己而言)。言歸正傳:新來了UI設(shè)計,也就有了新的UI風格。因為設(shè)計要換谷歌新推(現(xiàn)在不一定新了)Material Design ,但是iOS 官方?jīng)]有對應(yīng)的API。實現(xiàn)起來就會有很多的圖片,然后資源包就呵呵噠
  • 為了減小資源包(當前項目的資源主要是圖片,代碼量很?。?3M左右,就有了這次折騰。
  • 以前也接觸過fontAwesome,感覺iconfont是一條不錯的路。網(wǎng)頁的同學(xué)可以放心的使用阿里媽媽MUX,因為不會有后面提到的不同.ttf之間命名空間的問題。

二、試用過程

    1. 當你把你需要的icon.svg成功的通過阿里媽媽MUX轉(zhuǎn)換成了yourProject.ttf后,你就可以在你的代碼里使用了。下載下來的都是默認iconfont.xx。文件名是可以修改的,但是必要要和你的fontfamily 一致或者 就是默認的。不然會找不到你的字體的。fontfamily的設(shè)置就在你的iconfont 網(wǎng)頁的項目里編輯即可。
下載下來的文件目錄.png
  • 2.將ttf文件拖入你的資源文件夾內(nèi),然后設(shè)置你的plist文件


    08358A55-D6B0-4476-B41F-FC108D333B9A.png
  • 3.在Podfile文件 導(dǎo)入 IconFont
    注:pod 進來的這個是用來把字體轉(zhuǎn)image的,假如你的項目里是label直接使用text,而不是需要.ttf里面的字體圖片轉(zhuǎn)成image,那么你可以跳過pod 這一步
platform :ios, '8.0'
# ruby語法
# target數(shù)組 如果有新的target直接加入該數(shù)組
targetsArray = ['target0', 'target1']
# 循環(huán)
targetsArray.each do |t|
    target t do
        
        pod 'IconFont'
        
    end
end

  • 4.AppDelegate.m 實現(xiàn)文件初始化你的fontFamily
@interface AppDelegate ()<>

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    [TBCityIconFont setFontName:@"DZJIconfont"];
 
    [self.window makeKeyAndVisible];
    return YES;
} 
  • 5.代碼中使用icon

當做image使用

  self.iconImgView.image = [UIImage iconWithInfo:TBCityIconInfoMake(@"\U0000e606", 40, [UIColor blueColor])];

當做text使用

 self.label.text = @"\U0000e606";

至此,阿里媽媽上的單項目iconfont使用沒有問題

優(yōu)點如下:
1.方便自己管理icon圖庫,如果多個終端的icon都是一樣的話,那么只需要管理一套就好了
2.這也是一個好的資源文件網(wǎng)站,類似于pinterest(前陣子已墻)
3.等等常見的優(yōu)點就不說了

但是問題來了

1.不支持多項目同時使用,或者說是多個ttf文件同時使用時Unicode 不能保證唯一。詳情見我給阿里媽媽MUX提的issue
2.維護成本的問題。新的圖標上傳后,在我的圖標中是允許相同的svg出現(xiàn)的,然后會有兩個一樣的icon但是有不同的unicode。關(guān)于這個去重或者說是增量管理的問題,是可以通過人為的操作避免的,也許后面官方也能做到。
3.對UI設(shè)計師有點小要求即上傳的svg有點要求。這個在你上傳的時候網(wǎng)站會告訴你的。在使用時發(fā)現(xiàn)同樣的容器,同樣的字號,有的能展示,有的clip 了,有的大小不統(tǒng)一,那么就是設(shè)計師的圖有問題。
4.網(wǎng)頁的同學(xué)可以通過css文件,很方便的引入icon對應(yīng)的樣式類(className)來使用??墒窃诎沧亢蚷OS 來說,就有點尷尬了,只能使用unicode,而font class 和symbol 是給web同學(xué)的(也許是我蠢,如果能用希望讀者不吝賜教)。unicode的可讀性差,使用和替換比較惡心。目前有的方案是寫一個映射類@{@“myIcon”:@“\U0000e600”}這樣的東西,但是維護起來也很煩啊。

三、總結(jié)

iconfont的使用很簡單,也很方便。但是也有一定的局限性。所以需要根據(jù)自己項目的當前狀態(tài)和環(huán)境,來度量這個方案的可行性。我們通過壓縮圖片大小來減小ipa的容量。

個人建議:新項目適合用,降低后期的替換和替換成本。對于那種大量資源圖片的應(yīng)用來說也是值得去試一下的。

傳送門

什么是iconfont
一次關(guān)于IconFont的調(diào)研
IconFont
iconfont 的issue
阿里媽媽MUX

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容