分四步
//1.创建一个可变的属性字符串 方便修改属性
NSMutableAttributedString *mabstring = [[NSMutableAttributedString alloc]initWithString:string]; //1.1设置属性字符串属性 //1.1.1设置字体属性 CTFontRef font = CTFontCreateWithName((CFStringRef)@"Arial", fontInt, NULL);// 1.1.2设置字体颜⾊色 [mabstring addAttribute:(id)kCTForegroundColorAttributeName value:(id) color.CGColor range:range]; //1.1.3设置属性字符串 范围字体大小 [mabstring addAttribute:(id)kCTFontAttributeName value:(__bridge id)font range:NSMakeRange(0, string.length)];
//2.创建绘图路径//2.1 Create用完之后要对应一个Release//根据属性字符串得到绘图路径
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)mabstring); //2.2创建可变的绘图路径 CGMutablePathRef path = CGPathCreateMutable(); //2.3绘制矩形路径 CGPathAddRect(path, NULL ,CGRectMake(10 , 0 ,self.bounds.size.width-20 , self.bounds.size.height)); //CFRangeMake(0, 0)這是一個很重要的指令,通常我們看到CFRangeMake的第二個參數是正整數,如果為0的話,系統還是會跑到最後一個字。 //2.4 根据字符串和绘制路径得到绘图frame CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), path, NULL);
//3.获取当前(View)上下⽂(画笔/画布) 以便于之后的绘画。
CGContextRef context = UIGraphicsGetCurrentContext(); /* 以上就是我们绘制的文本,但是这个文本绘制在界面上是反的coreText使用Y翻转坐标系统,内容呈现也是上下翻转 */ //3.1翻转坐标系 难点 CGContextSetTextMatrix(context,CGAffineTransformIdentity); //x,y轴⽅方向移动 CGContextTranslateCTM(context , 0 ,self.bounds.size.height); //缩放x,y轴⽅方向缩放,-1.0为反向1.0倍,坐标系转换,沿y轴翻转180度 CGContextScaleCTM(context, 1.0 ,-1.0); /* 注: CoreText使用的是反Y轴坐标系。因此文本内容被渲染成倒立的 仅仅是在当前视图的上下文中应用了一个转换(上下颠倒坐标系)。在每次绘制Core Text的时候复制粘贴下面三行这段代码。 CGContextSetTextMatrix(context,CGAffineTransformIdentity); //x,y轴⽅方向移动 CGContextTranslateCTM(context , 0 ,self.bounds.size.height); //缩放x,y轴⽅方向缩放,-1.0为反向1.0倍,坐标系转换,沿y轴翻转180度 CGContextScaleCTM(context, 1.0 ,-1.0); */
//4.CTFrameDraw在指定上下文中绘制指定的文本绘制块。
CTFrameDraw(frame,context);
mrc下 要对应出现release CFRelease(frame); CGPathRelease(path); CFRelease(framesetter);
下面列出一些属性属性
CTFontRef font = CTFontCreateWithName(CFSTR("Georgia"), 40, NULL); [mabstring addAttribute:(id)kCTFontAttributeName value:(__bridge id)font range:NSMakeRange(0, 4)];/* //设置字体简隔 eg:test long number = 10; CFNumberRef num = CFNumberCreate(kCFAllocatorDefault,kCFNumberSInt8Type,&number); [mabstring addAttribute:(id)kCTKernAttributeName value:(__bridge id)num range:NSMakeRange(10, 4)]; *//* //设置字体颜色 [mabstring addAttribute:(id)kCTForegroundColorAttributeName value:(id)[UIColor redColor].CGColor range:NSMakeRange(0, 9)]; *//* //设置空心字 long number = 2; CFNumberRef num = CFNumberCreate(kCFAllocatorDefault,kCFNumberSInt8Type,&number); [mabstring addAttribute:(id)kCTStrokeWidthAttributeName value:(__bridge id)num range:NSMakeRange(0, [str length])]; //设置空心字颜色 [mabstring addAttribute: (id)kCTStrokeColorAttributeName value:(id)[UIColor greenColor].CGColor range:NSMakeRange(0, [str length])]; *//* //设置斜体字 CTFontRef font = CTFontCreateWithName((CFStringRef)[UIFont italicSystemFontOfSize:20].fontName, 14, NULL); [mabstring addAttribute:(id)kCTFontAttributeName value:(__bridge id)font range:NSMakeRange(0, 4)]; *//* //下划线 [mabstring addAttribute:(id)kCTUnderlineStyleAttributeName value:(id)[NSNumber numberWithInt:kCTUnderlineStyleDouble] range:NSMakeRange(0, 4)]; //下划线颜色 [mabstring addAttribute:(id)kCTUnderlineColorAttributeName value:(id)[UIColor redColor].CGColor range:NSMakeRange(0, 4)]; */