Core Text是iOS 和OSX 的文本渲染引擎,可以让你自由的控制文本格式和排版。Core Text不同于UIKit和Core Graphics/Quartz(虽然通过后两者你也可以进行文字渲染):在UIKit中,你可以使用UILabel来显示文字,它的操作非常简单,但是你没有办法控制UILabel中单独一个字符的字体颜色。也就是说,没有办法进行富文本的显示。在Core Graphics/Quartz中你可以非常漂亮的做系统所能做的每一件事,但是你必须要自己计算每个字符的位置,然后再把它渲染到屏幕上。也就是说它无法进行文字排版。Core Text 正是以上两点的结合。你既可以控制文字的位置、布局、颜色、大小等等属性,又不需要实际操心字符位置、文字断行等琐事。这篇教程会通过创建一个简单的杂志应用来教你使用Core Text。你将学到:排版文字并渲染到屏幕上;调整文字外观;在文本里嵌入图片;最终创建一个杂志应用。通过简单的操作控制文本格式。这篇教程的读者应该具有基本的iOS开发知识,否则可能需要先google一下入门教程。附://In Core Text you won’t be using NSString, but rather NSAttributedString, as shown CFAttributedString 一段有自己样式(统一不可变)的文字NSMutableAttributedString CFMutableAttributedString 一段有多种样式的文字 -> CGPathGetBoundingBox 得到占用的区域大小 可以得到每行的起始位置3.还可以控制文字横排竖排等 确定文字所需区域大小或指定区域可以显示多少文字 确定区域内点处文字范围NSTextCheckingResult 代表各种链接,时间地址电话网址自定义等。NSDataDector这是一个专门配合NSTextCheckingResult检测是否是特定链接的类。继承于NSRegularExpression类。enumerate 遍历match 匹配的数组numbersOfMatch 匹配的个数1.使用core text就是先有一个要显示的string,然后定义这个string每个部分的样式->attributedString -> 生成 CTFramesetter -> 得到CTFrame -> 绘制其中可以更详细的设置换行方式,对齐方式,绘制区域的大小等。2.绘制只是显示,点击事件呢?就需要一个判断了。CTFrame 包含了多个CTLine,并且可以得到各个line的其实位置与大小。判断点击处在不在某个line上。CTLine 又可以判断这个点(相对于ctline的坐标)处的文字范围。然后遍历这个string的所有NSTextCheckingResult,根据result的rang判断点击处在不在这个rang上,从而得到点击的链接与位置。处理。//CGContextRef context = UIGraphicsGetCurrentContext(); // Flip the coordinate system CGContextSetTextMatrix(context, CGAffineTransformIdentity); CGContextTranslateCTM(context, 0, ); CGContextScaleCTM(context, , );// you’ll use the entire view bounds as the rectangle where you will be drawing by creating a CGPath reference from path = CGPathCreateMutable(); //1 CGPathAddRect(path, NULL, ); //In Core Text you won’t be using NSString, but rather NSAttributedString, as shown here. NSAttributedString is a very powerful NSString derivate class, which allows you apply formatting attributes to text. For the moment we won’t be using formatting – this just creates a string holding plain * attString = [[[NSAttributedString alloc] initWithString:@"Hello core text world!"] autorelease]; //2 //CTFramesetter is the most important class to use when drawing with Core Text. It manages your font references and your text drawing frames. For the moment what you need to know is that CTFramesetterCreateWithAttributedString creates a CTFramesetter for you, retains it and initializes it with the supplied attributed string. In this section, after you have the framesetter you create a frame, you give the CTFramesetterCreateFrame a range of the string to render (we choose the entire string here) and the rectangle where the text will appear when framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attString); //3 //Here CTFrameDraw draws the supplied frame in the given frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, [attString length]), path, NULL); CTFrameDraw(frame, context); //4 //Finally, all the used objects are releasedCFRelease(frame); //5 CFRelease(path); CFRelease(framesetter); //Just one important thing to remember though: don’t forget to always use CFRelease on the references you get from functions which have “Create” in their name.