您的位置:首页 > 移动开发 > IOS开发

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

2016-02-19 00:00 134 查看
分四步

//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)];
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息