iOS CoreText文字图片排版及实现仿真翻页
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文字图片排版及实现仿真翻页