CoreText的图解

coreText所处地位

textKit是iOS7加入的


coreText图解1.png

coreText的基本原理

coreText的基本原理2_1.png

iOS/OSX中用于描述富文本的类是NSAttributedString。NSAttributedString 的 attributes 可以配置字符串中任意区域的,字体颜色,下划线,斜体,背景颜色。

CoreText 中最重要的两个概念就是 CTFrameSetter 和 CTFrame。

用 NSAttributedString 生成 CTFrameSetter
CTFrameSetter 是 CTFrame 的工厂,专门用来生产 CTFrame(用 CTFrameSetter 来 生产 CTFrame )
用 CTFrame 绘制到 context 上。
(CTLine 和 CTRun 是由属性文本自动处理的,要进行精细化配置的时候才需要自己处理 CTRun)

coreText的基本原理2_2.png

大概步骤

coreText所处地位

textKit是iOS7加入的


coreText图解1.png

coreText的基本原理

coreText的基本原理2_1.png

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


推荐阅读更多精彩内容