设置CoreText基本属性

来源:互联网 发布:2015年国内旅游数据 编辑:程序博客网 时间:2024/06/11 14:27

通过以下代码来学习一下coretext的基本属性的设置,加深了解coretext是通过哪些基本的属性来设置自己的样式的。

本文章参考:

http://web.archiveorange.com/archive/v/nagQXJDPDGVNz9LFLmSK

http://www.cocoanetics.com/2011/01/befriending-core-text/

首先,继承UIView,并重载其drawrect函数:

- (void)drawRect:(CGRect)rect {// Drawing code.//创建要输出的字符串NSString *longText = @”袁唯来来 Lorem ipsum dolor sit amet, Before the iPad was released you had basically two ways how to get text on screen. Either you would stick with UILabel or UITextView provided by UIKit or if you felt hard-core you would draw the text yourself on the Quartz level incurring all the headaches induced by having to mentally switch between Objective-C and C API functions.\As of iOS 3.2 we gained a third alternative in Core Text promising full control over styles, thread safety and performance. However for most of my apps I did not want to break 3.x compatibility and so I procrastinated looking at this powerful new API. Apps running only on iPads could have made use of Core Text from day 1, but to me it made more sense supporting iPad via hybrid apps where the iPhone part would still be backwards compatible.\Now as the year has turned the adoption of 4.x on all iOS platforms is ever more accelerating. Many new iPads where found under the Christmas tree and by now even the most stubborn people (read needing 3.x for jailbreaking and sim-unlocking) have little reason to stick with 3.x. Thus we have almost no incentive left to stick with 3.x compatibility. Yay!”; /* … *///创建AttributeStringNSMutableAttributedString *string = [[NSMutableAttributedString alloc]initWithString:longText];//创建字体以及字体大小CTFontRef helvetica = CTFontCreateWithName(CFSTR(”Helvetica”), 14.0, NULL);CTFontRef helveticaBold = CTFontCreateWithName(CFSTR(”Helvetica-Bold”), 14.0, NULL);//添加字体 目标字符串从下标0开始到字符串结尾[string addAttribute:(id)kCTFontAttributeNamevalue:(id)helveticarange:NSMakeRange(0, [string length])];//添加字体 目标字符串从下标0开始,截止到4个单位的长度[string addAttribute:(id)kCTFontAttributeNamevalue:(id)helveticaBoldrange:NSMakeRange(0, 4)];//添加字体 目标字符串从下标6开始,截止到5个单位长度[string addAttribute:(id)kCTFontAttributeNamevalue:(id)helveticaBoldrange:NSMakeRange(6, 5)];//添加字体 目标字符串从下标109开始,截止到9个单位长度[string addAttribute:(id)kCTFontAttributeNamevalue:(id)helveticaBoldrange:NSMakeRange(109, 9)];//添加字体 目标字符串从下标223开始,截止到6个单位长度[string addAttribute:(id)kCTFontAttributeNamevalue:(id)helveticaBoldrange:NSMakeRange(223, 6)];//添加颜色,目标字符串从下标0开始,截止到4个单位长度[string addAttribute:(id)kCTForegroundColorAttributeNamevalue:(id)[UIColor blueColor].CGColorrange:NSMakeRange(0, 4)];//添加过程同上[string addAttribute:(id)kCTForegroundColorAttributeNamevalue:(id)[UIColor redColor].CGColorrange:NSMakeRange(18, 3)];[string addAttribute:(id)kCTForegroundColorAttributeNamevalue:(id)[UIColor greenColor].CGColorrange:NSMakeRange(657, 6)];[string addAttribute:(id)kCTForegroundColorAttributeNamevalue:(id)[UIColor blueColor].CGColorrange:NSMakeRange(153, 6)];//创建文本对齐方式CTTextAlignment alignment = kCTLeftTextAlignment;//左对齐 kCTRightTextAlignment为右对齐CTParagraphStyleSetting alignmentStyle;alignmentStyle.spec=kCTParagraphStyleSpecifierAlignment;//指定为对齐属性alignmentStyle.valueSize=sizeof(alignment);alignmentStyle.value=&alignment;//创建文本行间距CGFloat lineSpace=5.0f;//间距数据CTParagraphStyleSetting lineSpaceStyle;lineSpaceStyle.spec=kCTParagraphStyleSpecifierLineSpacing;//指定为行间距属性lineSpaceStyle.valueSize=sizeof(lineSpace);lineSpaceStyle.value=&lineSpace;//创建样式数组CTParagraphStyleSetting settings[]={alignmentStyle,lineSpaceStyle};//设置样式CTParagraphStyleRef paragraphStyle = CTParagraphStyleCreate(settings, sizeof(settings));//给字符串添加样式attribute[string addAttribute:(id)kCTParagraphStyleAttributeNamevalue:(id)paragraphStylerange:NSMakeRange(0, [string length])];// layout masterCTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)string);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);// flip the coordinate systemCGContextRef context = UIGraphicsGetCurrentContext();CGContextSetTextMatrix(context, CGAffineTransformIdentity);CGContextTranslateCTM(context, 0, self.bounds.size.height);CGContextScaleCTM(context, 1.0, -1.0);// drawCTFrameDraw(leftFrame, context);// cleanupCGPathRelease(leftColumnPath);CFRelease(framesetter);CFRelease(helvetica);CFRelease(helveticaBold);[string release];UIGraphicsPushContext(context);}



原创粉丝点击