从0到1实现小说阅读器(一、初识CoreText)

1. CoreText 介绍

CoreText是实现富文本一种底层技术。很多UI控件都是基于CoreText实现的UILabelUITextFieldUITextViewUIWebViewUIWebView也能实现富文本,而且除了排版还支持内容的复制。但是CoreTextUIWebView比,占用内存更少、渲染速度更快、而且CoreTextCTFrameRef可以后台渲染,也就是说CoreTextUIWebView比更加灵活高效。缺点就是,实现起来相对复杂,内容的复制、图文混排、链接点击这些都要自己实现。

2. CoreText 的基本实现步骤:

1.创建绘制上下文(可以理解成画布)
  CGContextRef context = UIGraphicsGetCurrentContext();

2.将坐标系上下翻转(固定写法)
  CGContextSetTextMatrix(context, CGAffineTransformIdentity);
  CGContextTranslateCTM(context, 0, self.bounds.size.height);
  CGContextScaleCTM(context, 1.0, -1.0);

说明:对于“底层绘制引擎”来说,左下角是(0,0)坐标。对于UIKit层来说,左上角是(0,0)坐标。为了适应UIKit层的显示,需要在这里做一个翻转操作。

3.创建绘制路径(可以理解成刷子)
  CGMutablePathRef path = CGPathCreateMutable();
  CGPathAddRect(path, NULL, self.bounds);

4.创建文本
  NSAttributedString *attString = [[NSAttributedString alloc] initWithString:@"Hello World!"

5.创建绘制内容
  CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attString);
  CTFrameRef frame = CTFramesetterCreateFrame(framesetter,   CFRangeMake(0, [attString length]), path, NULL);

6.开始绘制CTFrameRef
  CTFrameDraw(frame, context);

7.释放CoreText对象(非OC对象需要手动释放内存)
  CFRelease(frame);
  CFRelease(path);
  CFRelease(framesetter);

总结:
绘制的关键对象是CTFrameRef
绘制的关键方法是CTFrameDraw();
以上代码在UIView对象的drawRect:方法中实现

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容