本文参考过:http://www.dev3g.com/?p=27
core text真的是一个不错的东东,用其实现富文本比较多见。
core text要配合着NSMutableAttributedString来用,基本可以这样理解,文本属性全部在NSMutableAttributedString上设。
比如
CTFontRef helvetica = CTFontCreateWithName(CFSTR(”Helvetica”), fontSize, NULL);
[_attributedText addAttribute:(id)kCTFontAttributeName value:(id)helvetica range:NSMakeRange(0, [string length])];
以及
//创建文本对齐方式
CTTextAlignment alignment = kCTLeftTextAlignment;//左对齐kCTRightTextAlignment为右对齐
CTParagraphStyleSetting alignmentStyle;
alignmentStyle.spec=kCTParagraphStyleSpecifierAlignment;//指定为对齐属性
alignmentStyle.valueSize=sizeof(alignment);
alignmentStyle.value=&alignment;
//创建文本行间距
CGFloat lineSpace=20;//间距数据
CTParagraphStyleSetting lineSpaceStyle;
lineSpaceStyle.spec=kCTParagraphStyleSpecifierMinimumLineHeight;//指定最小行高
lineSpaceStyle.valueSize=sizeof(lineSpace);
lineSpaceStyle.value=&lineSpace;
CTParagraphStyleSetting paraStyles[2] = {
{.spec = kCTParagraphStyleSpecifierAlignment, .valueSize = sizeof(CTTextAlignment), .value = (const void*)&alignment},
{.spec = kCTParagraphStyleSpecifierLineBreakMode, .valueSize = sizeof(CTLineBreakMode), .value = (const void*)&lineBreakMode},
};
CTLineBreakMode lineBreakMode = kCTLineBreakByCharWrapping;
CTParagraphStyleSetting settings[]={
alignmentStyle,lineSpaceStyle,
{.spec = kCTParagraphStyleSpecifierLineBreakMode, .valueSize =sizeof(CTLineBreakMode), .value = (const void*)&lineBreakMode},
};//创建出一个样式数组
CTParagraphStyleRef paragraphStyle = CTParagraphStyleCreate(settings, sizeof(settings));
[_attributedText addAttribute:(id)kCTParagraphStyleAttributeName value:(id)paragraphStyle range:NSMakeRange(0, [string length])]; //将刚刚创建的样式应用到attributedtext上
CFRelease(paragraphStyle);
下面是开始画了,需要注意的1点就是画出来坐标是反的,要转一下
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString(
(CFAttributedStringRef)_attributedText);
CGMutablePathRef leftColumnPath = CGPathCreateMutable();
CGPathAddRect(leftColumnPath, NULL,
CGRectMake(0, 0,
self.bounds.size.width,
self.bounds.size.height));
CTFrameRef leftFrame = CTFramesetterCreateFrame(framesetter,
CFRangeMake(0, 0),
leftColumnPath, NULL);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetTextMatrix(context, CGAffineTransformIdentity);
CGContextTranslateCTM(context, 0, self.bounds.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CTFrameDraw(leftFrame, context);//此处也可以单行来画,CTLineDraw
CGPathRelease(leftColumnPath);
CFRelease(framesetter);
CFRelease(helvetica);
[_attributedText release];
UIGraphicsPushContext(context);