iOS 界面上绘制不同字体 颜色 大小的字符串

分四步

//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)];
 */


转载于:https://my.oschina.net/bieshixuan/blog/617441

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值