CoreText实现图文混排 系列文章: CoreText实现图文混排 CoreText实现图文混排之点击事件 CoreText实现图文混排之文字环绕及点击算法 CoreText实现图文混排之尺寸估算及文本选择...---- CoreText 最近公司做了一个项目,需要用到图文混排技术。于是呢就疯狂地在网上搜刮资料。 不过很不幸的是,百度的CoreText资料还是比较少滴,翻来覆去就那几个版本。...以上就是对CoreText的介绍。...---- 老司机对CoreText实现图文混排的一些理解 老司机认为,图文混排中使用到的CoreText只是CoreText庞大体系中一个对富文本的增强的一部分。...下面是一些参考资料: coreText方法,列的很全 CTRun的详细介绍 CTLine的详细介绍 coreText基本原理及使用方法 图文混排的整体介绍 coreText使用方法
前言 YYText 是业界知名富文本框架,基于 CoreText 做了大量基础设施并且实现了两个上层视图组件:YYLabel 和 YYTextView。...若想深入理解 YYText 或者看懂本文,必须要了解 CoreText 基础知识并且有足够的耐心。...步骤看起来很简单,源码中涉及到 CoreText 和 CoreGraphics 的绘制时需要大量的代码来计算位置,这也是本文的重点之一。...希望读者朋友优先了解 CoreText 基础 (CoreText 官方介绍),这里放上两个结构图便于理解(图会有偏差): ? 结构图1 ?...但是这些自定义的 key CoreText 是识别不了的,那么框架内部是如何处理的呢?
CoreText实现图文混排之点击事件 系列文章: CoreText实现图文混排 CoreText实现图文混排之点击事件 CoreText实现图文混排之文字环绕及点击算法 CoreText实现图文混排之尺寸估算及文本选择...---- 今天呢,我们继续把CoreText图文混排的点击事件补充上,这样我们的图文混排也算是圆满了。 哦,上一篇的链接在这里 CoreText实现图文混排。...---- CoreText做图文混排之点击事件 主要思路 我们知道,CoreText是基于UIView去绘制的,那么既然有UIView,就有 -(void)touchesBegan:(NSSetCoreText做图文混排的点击事件也算是完成了。 最后放一张效果图吧。 大萌神镇楼 ---- 呐,了却一桩心事。。。
在了解排版概念和NSAttributeString后,再来看CoreText。...CoreText是一个高效处理字符和字形转换和进行文字排版的框架,API基于C语言。...CGRect CTLineGetImageBounds( CTLineRef line, CGContextRef _Nullable context ); CoreText不是UIKit...排版 经过漫长的学习,我们终于了解排版的基础知识和CoreText常用类,接下来看看CoreText的实际应用。...总结 本文详细介绍了CoreText的基础概念以及实际运用,如果理解完CoreText框架和文字排版、图文混排等知识,那么已经足够支撑做起一个阅读器啦,恭喜你。
CoreText实现图文混排之文字环绕及点击算法 系列文章: CoreText实现图文混排 CoreText实现图文混排之点击事件 CoreText实现图文混排之文字环绕及点击算法 CoreText实现图文混排之尺寸估算及文本选择...---- 终于我来完成我CoreText图文混排的最后一章了。...CoreText 这篇博客是以前两篇博客作为知识铺垫的,如果没有看过前两篇博客的童靴建议你去补票。当然本身你就了解CoreText相关知识的话也可以直接看本篇文章。...直到后来老司机的项目中由于要尽量少的使用三方SDK,所以自告奋勇的把自己写的coreText的可点击label引入到工程里面。...然而项目经理看了源码后表示虽然他没用过CoreText,但是遍历真的很蛋疼,决定引入一个TTT。老司机的心情瞬间跌入谷底。老司机当即决定,我要优化算法。
CoreText实现图文混排之尺寸估算及文本选择 系列文章: CoreText实现图文混排 CoreText实现图文混排之点击事件 CoreText实现图文混排之文字环绕及点击算法 CoreText实现图文混排之尺寸估算及文本选择...回头看看,距离CoreText系列首发过去一年也多了,看到第一篇文章即将超越1.3W的点击量老司机也是压力越来越大,毕竟作为瞎逼逼杰出代表的老司机偶尔也要正经一下。...废话这么多,在这进入主题,所以今天的博客中你将会看到如下内容: CoreText做排版时如何进行尺寸估算 如何实现TextView中类似的文本选择效果 CoreText一些API中一些已知bug ---...- 尺寸估算 说到尺寸估算,事实上同学们应该记得老司机在第一篇科普中提到过CoreText提供的一个尺寸估算的函数CTFramesetterSuggestFrameSizeWithConstraints...至于拿到每个字形的尺寸,这里我们借助CoreText还是可以做到的。 老司机在DWCoreTextLabel中做了如下的一层逻辑封装: ?
import CoreText.CTDefines import CoreText.CTFont import CoreText.CTFontCollection import CoreText.CTFontDescriptor...import CoreText.CTFontManager import CoreText.CTFontManagerErrors import CoreText.CTFontTraits import...CoreText.CTFrame import CoreText.CTFramesetter import CoreText.CTGlyphInfo import CoreText.CTLine import...CoreText.CTParagraphStyle import CoreText.CTRubyAnnotation import CoreText.CTRun import CoreText.CTRunDelegate...import CoreText.CTStringAttributes import CoreText.CTTextTab import CoreText.CTTypesetter import CoreText.SFNTLayoutTypes
先准备一个坑,自己跳 CoreText 之后,苹果新增加了UITextkit,更容易实现图文混排,甚至混编!...CoreText 苹果的这个框架对富文编辑提供了强大的底层支持,具体用法可参考网上的教程CoreText入门系列. ...使用CoreText编辑图文混排是没问题啦,但是考虑到...展示图文混搭的界面....我先下楼透透气...好吧,你可能想到了解析html. ...因此使用CoreText需要一个HTML的解析器.... 这个让我再想想...于是....
通过整理以上功能,我们可以把整个阅读器的功能分为几个方面: 1、数据处理:将原书籍数据进行处理,得到能够展示的文本以及相应的目录数据; 2、文本展示:用CoreText处理文本,将其划分为多页数据,...阅读器的排版基于CoreText,通过章节文本数据SSChapterData和用户设置SSConfigData,可以生成带格式的富文本NSAttributeString;通过CoreText将富文本转化成多个...从上图可以看到,origin(原点)的位置是在descent上面,也即是我们通过CoreText指定大小的时候。...2、图文混排 图文混排的过程中,CoreText会回调我们某个字符的宽高,但是如果不注意代码会出现异常: ?...`TDelegateRun::TDelegateRun(CTRun const*) + 102 frame #3: 0x000000010e4a03b6 CoreText`TGlyphEncoder
1、给UIlabel添加一个分类即可,代码如下: 必须导入这个头文件:CoreText/CoreText.h - (void)changeAlignmentRightandLeft{ CGRect
*)qnb_separatedLinesWithWidth:(CGFloat)width; @end #import "NSAttributedString+MOLine.h" #import CoreText.../CoreText.h> @implementation NSAttributedString (MOLine) /// 根据width返回每一行的内容 /// @param width 纯文字宽度
接着,我们尝试使用CoreText来渲染一段文本。...不同context的绘制坐标系各不相同,比如说UIKit的坐标系为左上角原点的坐标系,CoreGraphics的坐标系为左下角为原点的坐标系; CoreGraphics坐标系和UIKit坐标系的转换 CoreText...当用CoreText渲染时,坐标是(0,0),但是渲染的结果是在左上角,并不是在左下角;并且文字是上下颠倒的。...这时我们产生新的困扰: 用CoreText渲染文字的上下颠倒现象解决,但是修改后的坐标系UIKit无法正常使用,如何兼容两种坐标系?...iOS可以使用CGContextSaveGState()方法暂存context状态,然后在CoreText绘制完后通过CGContextRestoreGState ()可以恢复context的变换。
如果你用 CoreText 绘制文本,那就可以先生成 CoreText 排版对象,然后自己计算了,并且 CoreText 对象还能保留以供稍后绘制使用。...文本渲染 屏幕上能看到的所有文本内容控件,包括 UIWebView,在底层都是通过 CoreText 排版、绘制为 Bitmap 显示的。...对此解决方案只有一个,那就是自定义文本控件,用 TextKit 或最底层的 CoreText 对文本异步绘制。...尽管这实现起来非常麻烦,但其带来的优势也非常大,CoreText 对象创建好后,能直接获取文本的宽高等信息,避免了多次计算(调整 UILabel 大小时算一遍、UILabel 绘制时内部再算一遍);CoreText
subspec.frameworks = 'CFNetwork', 'CoreMotion', 'Foundation', 'CoreGraphics', 'SystemConfiguration', 'UIKit', 'CoreText...subspec.frameworks = 'CFNetwork', 'CoreMotion', 'Foundation', 'CoreGraphics', 'SystemConfiguration', 'UIKit', 'CoreText...subspec.frameworks = 'CFNetwork', 'CoreMotion', 'Foundation', 'CoreGraphics', 'SystemConfiguration', 'UIKit', 'CoreText...subspec.frameworks = 'CFNetwork', 'CoreMotion', 'Foundation', 'CoreGraphics', 'SystemConfiguration', 'UIKit', 'CoreText
如果你用 CoreText 绘制文本,那就可以先生成 CoreText 排版对象,然后自己计算了,并且 CoreText 对象还能保留以供稍后绘制使用。...文本渲染 屏幕上能看到的所有文本内容控件,包括 UIWebView,在底层都是通过 CoreText 排版、绘制为 Bitmap 显示的。...对此解决方案只有一个,那就是自定义文本控件,用 TextKit 或最底层的 CoreText 对文本异步绘制。...尽管这实现起来非常麻烦,但其带来的优势也非常大,CoreText 对象创建好后,能直接获取文本的宽高等信息,避免了多次计算(调整 UILabel 大小时算一遍、UILabel 绘制时内部再算一遍);CoreText...CellLayout 包含所有文本的 CoreText 排版结果、Cell 内部每个控件的高度、Cell 的整体高度。
在老司机看来,作者最有效的优化分为4部分: TableViewCell圆角优化 缓存行高 相对固定的图片及文字采用CoreText绘制 TableView加载数据逻辑优化 ---- 1.圆角 这部分作者的优化很简单...对于Label没有太好的优化方案,是在不行只能CoreText了。其实你会发现,UILable这个控件对中文十!分!不!友!好!...---- 3.CoreText绘制文本 首先,复杂的层级关系同样会给cell在绘制时添加很大的负担,这点是毋庸置疑的,所以VVebo的作者选择了将一些相对重复性很大的视图选择使用CoreText和CoreGraphic...CoreText绘制文本的和图片的技术你可以在老司机的CoreText实现图文混排系列中得到详细的实现方法,想看的去看吧。
二、CoreText CoreText绘制的流程图 CFAttributedStringRef :属性字符串,用于存储需要绘制的文字字符和字符属性 CTFramesetterRef:通过CFAttributedStringRef...CFRelease(fontRef); CFRelease(frame); CFRelease(path); CFRelease(framesetter); } @end 实际上CoreText...CoreText实现表情混排的原理,在简介中介绍过,一个CTLine代表一行,而一个CTLine又由多个CTRun组成,这里实现表情混排的原理其实就是把CTLine中的某一个CTRun替换成空白字符,然后再根据这个...space atIndex:50]; // 省略步骤5-6 // 步骤10:绘制图片 UIImage *image = [UIImage imageNamed:@"coretext-img
(nonatomic, strong) UIFont *font; @end NS_ASSUME_NONNULL_END #import "AsyncDrawLabel.h" #import CoreText.../CoreText.h> @implementation AsyncDrawLabel - (void)setText:(NSString *)text { _text = text; }..._font = font; } // 除了在drawRect方法中, 其他地方获取context需要自己创建[https://www.jianshu.com/p/86f025f06d62] coreText
API接口文档 https://developer.apple.com/library/mac/#documentation/Carbon/Reference/CoreText_Framework_Ref.../_index.html 1 CoreText.framework简介 1.1 常用类库 CoreText 框架中最常用的几个类: 1 CTFont 2 CTFontCollection 3 CTFontDescriptor...框架图 另对于Context的了解可以参考:http://www.padovo.com/blog/2013/01/31/study-coretext/ 1.5.1 设置字体及字体大小...---基本用法 http://blog.csdn.net/fengsh998/article/details/8691823 IOS CoreText.framework ---行CTLineRef...http://blog.csdn.net/fengsh998/article/details/8701738 IOS CoreText.framework ---段落样子CTParagraphStyle
领取专属 10元无门槛券
手把手带您无忧上云