版本記錄
版本號 | 時間 |
---|---|
V1.0 | 2018.03.21 |
前言
iOS圈內(nèi)有幾個人大家基本都知道氓癌,比如說王巍坠狡、唐巧泵三,還有YYKit框架的作者現(xiàn)任職于滴滴的郭曜源 - ibireme等咽安。這里有一篇唐巧對他的專訪伴网,還有他的 GitHub - Yaoyuan 和 博客,這里貼出來框架YYKit 框架妆棒。接下來幾篇我們就一起來看一下這個框架澡腾。感興趣的可以看上面寫的幾篇。
1. YYKit源碼探究(一) —— 基本概覽
2. YYKit源碼探究(二) —— NSString分類之Hash(一)
3. YYKit源碼探究(三) —— NSString分類之Encode and decode(二)
4. YYKit源碼探究(四) —— NSString分類之Drawing(三)
5. YYKit源碼探究(五) —— NSString分類之Regular Expression(四)
6. YYKit源碼探究(六) —— NSString分類之NSNumber Compatible(五)
7. YYKit源碼探究(七) —— NSString分類之Utilities(六)
8. YYKit源碼探究(八) —— NSNumber分類(一)
回顧
上一篇我們分析了NSNumber
分類的一些功能糕珊,這一篇我們就看一下UIFont
分類部分动分。
架構(gòu)組成
架構(gòu)組成如下圖所示。
接下來這幾篇红选,我們就圍繞這幾部分進(jìn)行說明澜公。
Font Traits API
下面我們看一下這部分的API
@property (nonatomic, readonly) BOOL isBold NS_AVAILABLE_IOS(7_0); ///< Whether the font is bold.
@property (nonatomic, readonly) BOOL isItalic NS_AVAILABLE_IOS(7_0); ///< Whether the font is italic.
@property (nonatomic, readonly) BOOL isMonoSpace NS_AVAILABLE_IOS(7_0); ///< Whether the font is mono space.
@property (nonatomic, readonly) BOOL isColorGlyphs NS_AVAILABLE_IOS(7_0); ///< Whether the font is color glyphs (such as Emoji).
@property (nonatomic, readonly) CGFloat fontWeight NS_AVAILABLE_IOS(7_0); ///< Font weight from -1.0 to 1.0. Regular weight is 0.0.
/**
Create a bold font from receiver.
@return A bold font, or nil if failed.
*/
- (nullable UIFont *)fontWithBold NS_AVAILABLE_IOS(7_0);
/**
Create a italic font from receiver.
@return A italic font, or nil if failed.
*/
- (nullable UIFont *)fontWithItalic NS_AVAILABLE_IOS(7_0);
/**
Create a bold and italic font from receiver.
@return A bold and italic font, or nil if failed.
*/
- (nullable UIFont *)fontWithBoldItalic NS_AVAILABLE_IOS(7_0);
/**
Create a normal (no bold/italic/...) font from receiver.
@return A normal font, or nil if failed.
*/
- (nullable UIFont *)fontWithNormal NS_AVAILABLE_IOS(7_0);
1. @property (nonatomic, readonly) BOOL isBold
該屬性的作用就是用來判斷字體是否是粗體。
示例程序
下面我們看一下示例程序喇肋。
UIFont *myFont = [UIFont boldSystemFontOfSize:20.0];
BOOL isBold = myFont.isBold;
NSLog(@"是否是黑體 = %d", isBold);
下面我們就看一下輸出結(jié)果
2018-03-19 18:50:50.992988+0800 JJWebImage[29239:4228882] 是否是黑體 = 1
方法實現(xiàn)
下面我們看這個屬性的實現(xiàn)玛瘸。
- (BOOL)isBold {
if (![self respondsToSelector:@selector(fontDescriptor)]) return NO;
return (self.fontDescriptor.symbolicTraits & UIFontDescriptorTraitBold) > 0;
}
2. @property (nonatomic, readonly) BOOL isItalic
該屬性的作用就是判斷是否是isItalic字體蜕青。
下面就不給出具體示例了,直接給出實現(xiàn)方法糊渊。
- (BOOL)isItalic {
if (![self respondsToSelector:@selector(fontDescriptor)]) return NO;
return (self.fontDescriptor.symbolicTraits & UIFontDescriptorTraitItalic) > 0;
}
3. @property (nonatomic, readonly) BOOL isMonoSpace
該屬性的作用就是判斷是否是isMonoSpace字體右核。
下面就不給出具體示例了,直接給出實現(xiàn)方法渺绒。
- (BOOL)isMonoSpace {
if (![self respondsToSelector:@selector(fontDescriptor)]) return NO;
return (self.fontDescriptor.symbolicTraits & UIFontDescriptorTraitMonoSpace) > 0;
}
4. @property (nonatomic, readonly) BOOL isColorGlyphs
該屬性的作用就是判斷是否是isColorGlyphs字體贺喝。
下面就不給出具體示例了,直接給出實現(xiàn)方法宗兼。
- (BOOL)isColorGlyphs {
if (![self respondsToSelector:@selector(fontDescriptor)]) return NO;
return (CTFontGetSymbolicTraits((__bridge CTFontRef)self) & kCTFontTraitColorGlyphs) != 0;
}
5. @property (nonatomic, readonly) CGFloat fontWeight
該屬性的作用就是獲取Font weight的值躏鱼,從-1.0到1.0之間進(jìn)行變化。
下面我們就看方法的實現(xiàn)
- (CGFloat)fontWeight {
NSDictionary *traits = [self.fontDescriptor objectForKey:UIFontDescriptorTraitsAttribute];
return [traits[UIFontWeightTrait] floatValue];
}
6. - (nullable UIFont *)fontWithBold
該方法的作用就是返回粗體UIFont對象殷绍。
方法實現(xiàn)
下面我們看一下方法實現(xiàn)染苛。
- (UIFont *)fontWithBold {
if (![self respondsToSelector:@selector(fontDescriptor)]) return self;
return [UIFont fontWithDescriptor:[self.fontDescriptor fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitBold] size:self.pointSize];
}
7. - (nullable UIFont *)fontWithItalic
該方法的作用就是返回Italic UIFont對象。
方法實現(xiàn)
下面我們看一下方法實現(xiàn)主到。
- (UIFont *)fontWithItalic {
if (![self respondsToSelector:@selector(fontDescriptor)]) return self;
return [UIFont fontWithDescriptor:[self.fontDescriptor fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitItalic] size:self.pointSize];
}
8. - (nullable UIFont *)fontWithBoldItalic
該方法的作用就是返回BoldItalic
UIFont對象茶行。
方法實現(xiàn)
下面我們看一下方法實現(xiàn)。
- (UIFont *)fontWithBoldItalic {
if (![self respondsToSelector:@selector(fontDescriptor)]) return self;
return [UIFont fontWithDescriptor:[self.fontDescriptor fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitBold | UIFontDescriptorTraitItalic] size:self.pointSize];
}
9. - (nullable UIFont *)fontWithNormal
該方法的作用就是返回Normal UIFont對象登钥。
方法實現(xiàn)
下面我們看一下方法實現(xiàn)畔师。
- (UIFont *)fontWithNormal {
if (![self respondsToSelector:@selector(fontDescriptor)]) return self;
return [UIFont fontWithDescriptor:[self.fontDescriptor fontDescriptorWithSymbolicTraits:0] size:self.pointSize];
}
后記
本篇我們分析了
UIFont
的分類的功能,主要介紹了UIFont分類的架構(gòu)以及第一部分Font Traits
的說明牧牢,喜歡的給個贊~~~