iOS使用runtime設定字型格式

2022-05-12 03:10:03 字數 2150 閱讀 4715

今天在cocoachina上看了一篇文章,是關於自定義字型格式樣式的,自己就學習了一下,然後在這裡和大家進行分享。

要自定義字型樣式,我們必須要獲取ttf格式的字型樣式,這裡有乙個國外的**,裡邊字型格式挺多的,大家可以收藏一下:已經上傳至github,位址是:廢話不多說,下面進行具體介紹。

新建工程,將三種字型拖入專案中,然後在info.plist檔案中配置字型

可在target裡檢視字型是否新增成功。

接著,在storyboard中拖入控制項,並與控制器關聯,然後設定控制項的屬性,如下:

_label.font = [uifont fontwithname:@"

americana dreams upright

" size:17.0f

];

_button.titlelabel.font = [uifont fontwithname:@"

americana dreams upright.ttf

" size:17.0f];

執行工程,此時我們可以看到,label中的英文本型設定成功,但是漢字並沒有效果,說明一些字型庫並不相容漢字,這個我們可以通過字型側檢視。button的字型設定失敗,我們可以知道這種方式並不能有效的設定字型樣式。

我們同樣的方法設定其他兩種字型,得到的結果是:漢字和英文設定均失敗。為什麼會這樣呢,這裡普及一下:在設定字型樣式的時候,我們不能直接使用字型族科名字,而需要使用字型族科下字樣名字。

通過mac自帶的字型冊開啟loveway.tff,我們可以看到,它的字型樣式為fzlibian-s02s。

我們也可以通過遍歷族科,獲取字型樣式。接著設定空間屬性。

for (nsstring * familyname in

[uifont familynames])

}_label.font = [uifont fontwithname:@"

fzlibian-s02s

" size:17.0f

];

_button.titlelabel.font = [uifont fontwithname:@"

fzlibian-s02s

" size:17.0f];

執行,我們就可以看到設定成功。 

字型設定成功,接下來試著封裝一下這個方法,需要的時候方便呼叫。

1.自定義label類mylabel,繼承自uilabel;呼叫runtime,並在+ (void)load裡實現class_addmethod、class_replacemethod、method_exchangeimplementations一系列方法,

+ (void

)load

else

});}- (void)mywillmovetosuperview:(uiview *)newsuperview

}

然後在控制器裡,新增label,設定屬性,**如下:

_label2 = [[mylabel alloc]initwithframe:cgrectmake(170,350,100, 30

)];

_label2.text=@"

llklkjkhjkhhu";

_label2.textcolor =[uicolor redcolor];

_label2.backgroundcolor =[uicolor lightgraycolor];

[self.view addsubview:self.label2];

執行程式,可以看到,字型設定成功。如果我們需要自定義字型,可以直接拖入自定義的label類,配置即可。

我們也可以通過類擴充套件的方法實現自定義字型的功能,具體**如下:

+ (void

)load

else

});}- (void)mywillmovetosuperview:(uiview *)newsuperview

else}}

這種方法跟第一種自定義類相比的優點在於可以用於設定按鈕等其他空間的字型,缺點是當使用系統字型的時候必須手動設定tag值,耦合性略強。

希望有大神可以幫忙進行改進。

iOS開發中runtime的使用

事實證明 1.傳送訊息 implementation viewcontroller void viewdidload end implementation uiimage image 載入分類到記憶體的時候呼叫 void load 注意 不能在分類中重寫系統方法imagenamed,因為會把系統的功...

iOS開發 runtime使用場景

1.訊息 import import objc msgsend id person class selector walk 2.獲取所有方法,變數 objc property t propertys class copypropertylist clazz,outcount 3.交換方法 aop 外...

iOS開發 runtime的基本使用

runtime的基本使用 1,動態改變例項變數的值 2,交換方法 3,動態新增方法 4,使用runtime為分類新增屬性 1,動態改變例項變數的值 1,動態改變屬性值 void change value name 3,動態新增方法 3,使用runtime 動態新增方法 void add method...