浅析CoreText自由绘制
http://blog.csdn.net/xcysuccess3 版权所有 ,转载请说明
这三天自己一直在研究如何绘制文字,首先是找了CoreText, 但是没有发现DrawAtPosition的方法,无奈之下转向CoreGraphic,这里倒是有一个DrawAtPosition,具体思路就是把文字转换成图元然后去绘制。这位仁兄讲的非常好:http://blog.csdn.net/kmyhy/article/details/7651794
大家可以去参考。他还提供了源码。
但是使用Coretext如何按照坐标进行自由绘制呢?当然,CoreText内置了文字排版,但是这个有些并不精确。翻遍了API,并无发现DrawPosition方法.难道真的没办法了么?
答案是否定的。参考代码如下:
- (id)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; if (self) { // Initialization code self.backgroundColor =[UIColor clearColor]; } return self;}- (void)drawRect:(CGRect)rect{ [super drawRect:rect]; CGContextRef context = UIGraphicsGetCurrentContext(); CGMutablePathRef path = CGPathCreateMutable(); //1 // CGContextSetTextMatrix(context, CGAffineTransformIdentity); CGPathAddRect(path, NULL, self.bounds ); for(int i = 0 ;i<3;++i) { CGContextSetTextMatrix(context, CGAffineTransformIdentity); CGContextSaveGState(context); NSLog(@"self.bounds.size.height==>%f",self.bounds.size.height); if(i==0) { CGContextTranslateCTM(context, 20 , self.bounds.size.height); } else if (i==1) { CGContextTranslateCTM(context, 20 , self.bounds.size.height+10); } else { CGContextTranslateCTM(context, 180 , self.bounds.size.height); } CGContextScaleCTM(context, 1.0, -1.0); NSMutableAttributedString* attStringTemp = [[[NSMutableAttributedString alloc] initWithString:@"hello coretext world!"]autorelease]; [attStringTemp addAttribute:(NSString*)(kCTForegroundColorAttributeName) value:(id)[[UIColor blueColor]CGColor] range:NSMakeRange(0,[attStringTemp length])]; CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attStringTemp); //3 CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), path, NULL); CTFrameDraw(frame, context); //4 CGContextRestoreGState(context); CFRelease(frame); //5 CFRelease(framesetter); } CFRelease(path);}
起点随笔
2012-10-22
ios交流QQ群:237305299