本文主要的內容是討論如何使用CoreText進行最簡單的文本內容的繪製,同時也談到的CoreText繪圖的一個最基本可是也是最重要的CoreText座標系的概念,CoreText座標系的概念是貫穿全部的CoreText繪圖場景,全部這裏先作個介紹git
其它文章:
CoreText入門(一)-文本繪製
CoreText入門(二)-繪製圖片
CoreText進階(三)-事件處理
CoreText進階(四)-文字行數限制和顯示更多
CoreText進階(五)- 文字排版樣式和效果
CoreText進階(六)-內容大小計算和自動佈局
CoreText進階(七)-添加自定義View和對其佈局
本文的主要內容以下字體
Demo:CoreTextDemo.net
蘋果的文檔中對CoreText的描述以下翻譯
Core Text is an advanced, low-level technology for laying out text and handling fonts. Core Text works directly with Core Graphics (CG), also known as Quartz, which is the high-speed graphics rendering engine that handles two-dimensional imaging at the lowest level in OS X and iOS.3d
翻譯過來的意思就是:CoreText是一種高級的底層技術, 用於佈局文本和處理字體。CoreText直接與Core Graphics (CG) 一塊兒工做, 也稱爲Quartz, 它是在 OS X 和 iOS 的最底層的處理二維成像的高速圖形渲染引擎。code
UIKit的座標系原點是在右上角,CoreText的座標原點是在左下角,而且繪製的內容是顛倒的,因此須要進行座標轉換,繪製的內容顯示才能正常orm
 使用如下的代碼進行座標系的轉換blog
CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetTextMatrix(context, CGAffineTransformIdentity); CGContextTranslateCTM(context, 0, self.bounds.size.height); CGContextScaleCTM(context, 1, -1);
步驟示例圖:
 事件
效果圖

文字繪製的流程圖:

- (void)drawRect:(CGRect)rect { [super drawRect:rect]; CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetTextMatrix(context, CGAffineTransformIdentity); CGContextTranslateCTM(context, 0, self.bounds.size.height); CGContextScaleCTM(context, 1, -1); // 繪製區域 CGMutablePathRef path = CGPathCreateMutable(); CGPathAddRect(path, NULL, self.bounds); // 繪製的內容屬性字符串 NSDictionary *attributes = @{NSFontAttributeName: [UIFont systemFontOfSize:18], NSForegroundColorAttributeName: [UIColor blueColor] }; NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:@"Hello world Hello world Hello world Hello world Hello world Hello world Hello world Hello world Hello world Hello world Hello world Hello world" attributes:attributes]; // 使用NSMutableAttributedString建立CTFrame CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attrStr); CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, attrStr.length), path, NULL); // 使用CTFrame在CGContextRef上下文上繪製 CTFrameDraw(frame, context); }
使用CoreText繪製文本步驟比較簡單,這裏面子用到CoreText中的一個類CTFrame
,CoreText中還有許多其餘的概念沒有涉及到,下一篇CoreText入門(二)-繪製圖片會涉及到CoreText中更多的概念