//CoreText 跨平台,以lable为例
//引入CoreText.framework框架。
NSDictionary *attributes = @{
NSFontAttributeName:[UIFont systemFontOfSize:14],
NSForegroundColorAttributeName:[UIColor blackColor],
};
NSMutableAttributedString *attrtext = [[NSMutableAttributedStringalloc] initWithString:text attributes:attributes];
//1.设置文本属性
[attrtextaddAttribute:NSUnderlineStyleAttributeName value:@2 range:NSMakeRange(0, 3)];
//Foundation --->CoreFoundation
NSString *s =@"tt";
CFStringRef s2 = (__bridgeCFStringRef)s;
//1.通过NSMutableAttributedString 文本属性对象 构造--->CTFramesetterRef
CTFramesetterRefframesetter =CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attrtext);
//2.构造CGPath
CGMutablePathRef path =CGPathCreateMutable();
// CGRectInset(<#CGRectrect#>, <#CGFloat dx#>, <#CGFloat dy#>)
CGPathAddRect(path, NULL,self.bounds);
//3.通过CTFramesetterRef和CGPath 构造出一个CTFrameRef
CTFrameRef frame =CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), path, NULL);
//4.取得绘制的上下文
CGContextRef ctx =UIGraphicsGetCurrentContext();
//坐标系统向下平移当前视图的高度
CGContextTranslateCTM(ctx,0, CGRectGetHeight(self.bounds));
//缩放倍数为-1,使用坐标指向反方向
CGContextScaleCTM(ctx, 1,-1.0);
//5.绘制frame
CTFrameDraw(frame, ctx);
//取得frmae中所有的行
CFArrayRef lines =CTFrameGetLines(frame);
//绘制一行
// CTLineDraw(<#CTLineRef line#>, <#CGContextRef context#>)
CTLineRef line;
CFArrayRef runs =CTLineGetGlyphRuns(line);
// CTRunDraw(<#CTRunRefrun#>, <#CGContextRef context#>, <#CFRange range#>)
//常用开源框架
FTCoreText
DTCoreText
本文详细介绍如何使用CoreText框架实现跨平台的文字布局与渲染,包括文本属性设置、路径创建及帧的绘制过程,并提及了几个常用的开源框架。
404

被折叠的 条评论
为什么被折叠?



