coreText所处地位
textKit是iOS7加入的
coreText的基本原理
iOS/OSX中用于描述富文本的类是NSAttributedString。NSAttributedString 的 attributes 可以配置字符串中任意区域的,字体颜色,下划线,斜体,背景颜色。
CoreText 中最重要的两个概念就是 CTFrameSetter 和 CTFrame。
用 NSAttributedString 生成 CTFrameSetter
CTFrameSetter 是 CTFrame 的工厂,专门用来生产 CTFrame(用 CTFrameSetter 来 生产 CTFrame )
用 CTFrame 绘制到 context 上。
(CTLine 和 CTRun 是由属性文本自动处理的,要进行精细化配置的时候才需要自己处理 CTRun)
大概步骤
coreText所处地位
textKit是iOS7加入的
coreText的基本原理
iOS/OSX中用于描述富文本的类是NSAttributedString。NSAttributedString 的 attributes 可以配置字符串中任意区域的,字体颜色,下划线,斜体,背景颜色。
CoreText 中最重要的两个概念就是 CTFrameSetter 和 CTFrame。
用 NSAttributedString 生成 CTFrameSetter
CTFrameSetter 是 CTFrame 的工厂,专门用来生产 CTFrame(用 CTFrameSetter 来 生产 CTFrame )
用 CTFrame 绘制到 context 上。
(CTLine 和 CTRun 是由属性文本自动处理的,要进行精细化>配置的时候才需要自己处理 CTRun)
![coreText的基本原理2_2.png](http://upload-images.jianshu.io/upload_images/935738-8456995eb2c54c5b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
[来自唐巧 ](http://blog.devtang.com/2015/06/27/using-coretext-1/)
import "CTDisplayView.h"
import "CoreText/CoreText.h"
@implementation CTDisplayView
- (void)drawRect:(CGRect)rect
{
[super drawRect:rect];
// 步骤 1
CGContextRef context = UIGraphicsGetCurrentContext();
// 步骤 2
CGContextSetTextMatrix(context, CGAffineTransformIdentity);
CGContextTranslateCTM(context, 0, self.bounds.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
// 步骤 3
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddRect(path, NULL, self.bounds);
// 步骤 4
NSAttributedString *attString = [[NSAttributedString alloc] initWithString:@"Hello World!"];
CTFramesetterRef framesetter =
CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attString);
CTFrameRef frame =
CTFramesetterCreateFrame(framesetter,
CFRangeMake(0, [attString length]), path, NULL);
// 步骤 5
CTFrameDraw(frame, context);
// 步骤 6
CFRelease(frame);
CFRelease(path);
CFRelease(framesetter);
}
@end