iOS CoreText文字图片排版及实现仿真翻页

作者 : 开心源码 本文共1632个字,预计阅读时间需要5分钟 发布时间: 2022-05-13 共140人阅读

demo实现效果.gif

一、仿真翻页UIPageViewController

1.1 UIPageViewController实现相关代理商

  • (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController向前翻页
  • (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController向后翻页
  • (void)pageViewController:(UIPageViewController *)pageViewController willTransitionToViewControllers:(NSArray<UIViewController *> *)pendingViewControllers将要翻页

1.2 UIPageViewController需要注意相关事项

翻页时注意第一页和最后一页,快速点击时会越界。需要做越界解决

二、CoreText排版

2.1解析

json文件->NSAttributedString->CFAttributedStringRef->CTFramesetterRef->CTFrameRef

2.1.1json文件->NSAttributedString解析

颜色、字体、段落缩进相关属性在这一步进行设置
图片占一个位置

2.1.2CTFramesetterRef->CTFrameRef解析

一个CTFrameRef是一个区块,在此可以了解为一页,多个CTFrameRef构成多页
一个CTFrameRef显示多少内容,是系统根据CGPathRef大小自动计算的
strLength总长度,textPos当前解析位置,根据textPos< strLength解析能否完成

2.1.3CoreText内存问题

所有Create出来的都要手动释放,如CTFramesetterCreateWithAttributedString、CGPathCreateWithRect、CTFramesetterCreateFrame

2.1.3填充图片占位

31556672643_.pic.jpg

一张草图说明CTFrameRef,CTLine,CTRun之间的关系。CTFrameRef是一整块,CTLine就是一行,CTRun就是行中的元素

图片占位,遍历CTFrame->CTLine->CTRun
CTRunDelegateRef delegate = (__bridge CTRunDelegateRef)[runAttributes valueForKey:(id)kCTRunDelegateAttributeName];//判断能否有占位
可以得到图片对应的位置,偏移量和图片大小等数据。

2.2绘制

2.2.1坐标

CoreText坐标是以左下角为原点的,而手机屏幕是以左上角为原点的。坐标系需要做个旋转,先平移屏幕高度,再沿X轴做180°翻转。
CGContextSetTextMatrix(context, CGAffineTransformIdentity);
CGContextTranslateCTM(context, 0, configManager.height);
CGContextScaleCTM(context, 1.0, -1.0);

2.2.2文本和图片绘制

CTFrameDraw绘制文字
CGContextDrawImage绘制图片

总结:本篇为CoreText入门。最后附上demo

参考文章: iOS:基于CoreText的排版引擎

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » iOS CoreText文字图片排版及实现仿真翻页

发表回复