读书人

Core Text实现编者的时候会用到的

发布时间: 2013-10-17 17:26:17 作者: rapoo

Core Text实现编辑的时候会用到的

首先说一下实现的原理, 首先当手指开始触摸屏幕 以及滑动的时候, 效果与画矩形框是一样的 因此 此时的代码也机会没有区别,

当手指松开后 在当前的矩形框处创建一个临时的textView ,并且背景变为灰色,textView 编辑结束, 在textView的 完成委托方法中 去掉灰色的背景 去掉临时的textView 在相同的位置上 利用coreText 显示出刚才编辑的内容

首先 手指触摸 会调用到

TextTool.m

123456789101112131415161718192021222324252627- (void)draw { CGContextRef context = UIGraphicsGetCurrentContext(); NSMutableAttributedString *attrString = [[[NSMutableAttributedString alloc] initWithString:self.text] autorelease]; [attrString addAttribute:(NSString *)(kCTForegroundColorAttributeName) value:(id)self.strokeColor.CGColor range:NSMakeRange(0, [self.text length])]; CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attrString); CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, [attrString length]), self.path.CGPath, NULL); CFRelease(framesetter); //CFRelease(attrString); if(frame) { CGContextSaveGState(context); // Core Text wants to draw our text upside-down! This flips it the // right way. CGContextTranslateCTM(context, 0, path.bounds.origin.y); CGContextScaleCTM(context, 1, -1); CGContextTranslateCTM(context, 0, -(path.bounds.origin.y + path.bounds.size.height)); CTFrameDraw(frame, context); CGContextRestoreGState(context); CFRelease(frame); }}

首先获得当前的上下文

创建一个属性自字符串NSMutableAttributedString 并设置他的颜色以及其他属性

利用该属性字符串 创建一个CTFramesetterRef

再创建一个CTFrameRef

释放之前创建的CTFramesetterRef 对象framesetter

由于CoreText 是来自于Mac OS X的 它在绘图的时候 认为坐标轴是倒置的,所以在没ios中会产生倒置的效果,这里要转化以下才能正常显示

学习这一章 主要学习它的思路 怎么实现在一个view上 画出一个矩形框后 就是一个testView 并且编辑完成后 在相应的位置相识出编辑的内容 当然我们也可以利用 一些其他的图文混排的库 比如DTcoreText

读书人网 >移动开发

热点推荐