掌桥专利:专业的专利平台
掌桥专利
首页

基于iOS的文本渲染引擎、方法、装置、设备及介质

文献发布时间:2023-06-19 11:35:49


基于iOS的文本渲染引擎、方法、装置、设备及介质

技术领域

本发明涉及信息处理领域,尤其涉及一种基于iOS的文本渲染引擎、方法、装置、计算机设备及存储介质。

背景技术

在基于iOS系统的应用(App)开发中,一般用控件UILabel来展示文字、控件UIImageView用来显示图片、控件UIButton用于简单的图文点击响应事件;而对于稍复杂一点的可以借助控件NSAttributedString来实现图文混排的需求;又或者,将图文内容转换为HTML由控件WKWebView(UIWebView)来展示。然而,以上方案都有各自的局限性:UILabel绘制NSAttributedString不能灵活定位文本内的点击锚点区域;通过转换为HTML展示,则带来Native端与Web端交互成本以及WKWebView自身的性能问题。

发明内容

本发明实施例提供一种基于iOS的文本渲染引擎、方法、装置、计算机设备及存储介质,不仅可以解决客户端页面布局复杂的问题,提升UI界面开发效率;而且,尤其针对富文本渲染,具有渲染速度快,提高App渲染性能;异步化处理安全性高的特点。

一种基于iOS的文本渲染引擎、用于绘制App界面,其特征在于,所述文本渲染引擎对iOS系统的基础绘图引擎进行封装,并包括以下绘制接口:

可变属性字符串扩展类,用于组装待绘制的富文本并计算实际绘制所需要的矩形区域;

文字附件类,用于配置图像、视图控件的绘制信息;

段落式样类,用于配置待绘制的段落式样;

实例生成类,用于生成待绘制界面所需要的实例;

视图显示类,用于显示所述可变属性字符串扩展类的实例,并将所述文字附件类、段落式样类所配置的数据通过所述实例生成类绘制到界面上。

一种基于iOS的文本渲染方法,其特征在于,包括如上所述的基于iOS的文本渲染引擎,并包括如下步骤:

当获取待显示到界面上的富文本对象时,通过所述可变属性字符串扩展类对所述富文本对象生成一待绘制对象,并计算实际绘制所述待绘制对象所需要的矩形区域;

通过所述文字附件类、段落式样类对所述待绘制对象配置绘制参数;

所述视图显示类根据所述绘制参数实例化所述待绘制对象,并通过所述实例生成类将所述富文本对象绘制到界面上。

一种基于iOS的文本渲染装置,用于绘制App界面,其特征在于,所述文本渲染装置对iOS系统的基础绘图引擎进行封装,并包括以下绘制接口:

可变属性字符串扩展类,用于组装待绘制的富文本并计算实际绘制所需要的矩形区域;

文字附件类,用于配置图像、视图控件的绘制信息;

段落式样类,用于配置待绘制的段落式样;

实例生成类,用于生成待绘制界面所需要的实例;

视图显示类,用于显示所述可变属性字符串扩展类的实例,并将所述文字附件类、段落式样类所配置的数据通过所述实例生成类绘制到界面上。

一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述基于iOS的文本渲染方法的步骤。

一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述基于iOS的文本渲染方法的步骤。

上述基于iOS的文本渲染引擎、方法、装置、计算机设备及存储介质,对iOS系统的基础绘图引擎(CoreText、CoreGraphic等)进行封装,并包括绘制接口:可变属性字符串扩展类、文字附件类、段落式样类、实例生成类及视图显示类。即,本基于iOS的文本渲染引擎通过高度封装,以少量的绘制接口实现复杂界面的展示和排版,克服了原生iOS系统中绘图控件及现有第三方绘图组件/引擎的弊端。

在基于本文本渲染引擎的渲染方法中,针对待渲染的富文本对象,可变属性字符串扩展类用于为其生成待绘制对象,并计算实际绘制所需的矩形区域;文字附件类和段落式样类用于配置待绘制对象的绘制参数,以便于最终渲染;视图显示类用于显示与富文本对象对应的待绘制对象,并通过最终通过实例生成类执行具体的绘制过程,从而完成渲染。

其中,文本渲染引擎并发进行多个画板视图的渲染和显示工作,达到内存占用低,渲染速度快的效果;在计算矩形区域、样式排版渲染、图片解码、实际绘制过程中,实现了全程异步化,以保证线程安全。

通过本技术方案,解决了客户端界面布局复杂、渲染难度大的问题,提升了UI界面的开发效率,提高了App的渲染性能。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1是本发明一实施例中基于iOS的文本渲染引擎的框架图;

图2是本发明一实施例中基于iOS的文本渲染方法的流程图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

在一实施例中,提供一种基于iOS的文本渲染引擎HBCoreText,其框架图如图1所示,文本渲染引擎对iOS系统的基础绘图引擎进行了封装,并对外提供绘制接口,用于将待渲染文本最终绘制到App界面上。

其中,基础绘图引擎主要包括CoreText和CoreGraphic。CoreText是一个基于iOS3.2+和OSX 10.5+并能够对文本格式和文本布局进行精细控制的文本引擎;其良好的结合了Core Graphics/Quartz。CoreText包括基于C语言的底层API(应用程序接口)。CoreGraphic是Quartz 2D的一个高级绘图引擎,对底层C语言进行了简单封装,提供大量的低层次、轻量级的2D渲染API。由于CoreText和CoreGraphic是基于C语言的,因此,使用前必须要对系统底层的排版原理理解透彻,具有相当高的技术门槛。

基于iOS的文本渲染引擎在基础绘图引擎的基础上进行进一步封装,通过构建的少量绘制接口,以简化现有的渲染方案,降低开发难度、提升开发效率。

基于iOS的文本渲染引擎具体包括以下绘制接口:

1)可变属性字符串扩展类,对应NSMutableAttributedString扩展类,用于组装待绘制的富文本并计算实际绘制所需要的矩形区域。

与传统的通过控件“拼接”、“添加”视图排列组合方式构建界面不同,可变属性字符串扩展类提供了灵活、便捷的接口让开发者以“视觉所见”的方式构建界面,并可以实现通过一种NSAttributedString对象来表达任一视觉元素、甚至是任一视觉元素的组合,以消除界面布局的复杂性。

具体地,可变属性字符串扩展类支持组装纯文本(Text)、带圆角的文本(BezierText)、可点击的文本(TouchText)、图片(Image)、视图(View)、空白宽度(whitespace:width)、换行高度(newline:height)、制表符(Tab)、超文本(Html)等控件。

富文本是相对纯文本(只有文字和基本的标点)而言,富文本除包括文字和基本标点之外,还包括图、各种特殊标点、分段格式、式样等元素。富文本数据绘制到界面之前,需要计算各个NSMutableAttributedString对象的绘制区域,即以矩形区域表示。

具体地,HBCoreText封装了预设算法,可在后台异步预先计算需要绘制的区域,并在适当的时机进行绘制,而不会阻塞主线程,起到异步化处理的作用。

2)文字附件类HBCoreTextParagraphStyle,用于配置图像(Image)、视图(View)控件的绘制信息。

其中,绘制信息包括待绘制区域的尺寸、坐标、相对于文本的对齐方式。具体地,HBCoreText通过内部预设的计算其绘制区域和对齐方式的算法,使其具有绘制Image和View的能力,并能做到了和文本绘制一样简单、高效。

3)段落式样类HBCoreTextParagraphStyle,用于配置待绘制的段落式样,,例如文本对齐方式、文本绘制方向、换行模式、行间距、行头和行尾缩进、段落之间间距、制表位等。

4)实例生成类,用于生成待绘制界面所需要的实例。实例生成类具体包括HBCoreTextGlyphRun、HBCoreTextLayoutLine、HBCoreTextLayoutFrame类,并分别对应生成最后绘制界面需要的CTRunRef、CTLineRef、CTFrameRef类的实例。即,待绘制界面所需要的实例包括布局线实例(CTLineRef)、布局框架实例(CTFrameRef)、字形显示实例(CTRunRef);整个生成过程充分利用系统底层C语言的高效能力,生成过程几乎无性能损耗,极大提高文本渲染的性能。

5)视图显示类HBCoreTextView,用于显示可变属性字符串扩展类的实例,并将文字附件类、段落式样类所配置的数据通过实例生成类绘制到界面上。

具体地绘制过程举例如下:

即,整个绘制绘制过程在drawRect中进行,在绘制之前先进行坐标翻转,使得CoreText的默认坐标系原点在左下角。

进一步地,一个HBCoreTextView里面可以持用多个可变属性字符串扩展类(NSMutableAttributedString)的实例,以达到快速渲染的目的。例如,以航班管家机票列表每个cell视图为例,原本方案由13个控件(UILabel和UIImageView)绘制,而应用HBCoreText后仅需1个视图HBCoreTextView绘制而成。具体地实现代码如下,只需要给每个实例指定绘制区域iOSDrawingRect即可:

HBCoreTextView*coreTextView1=[[HBCoreTextView alloc]initWithFrame:rect];

coreTextView1.attributedText=attributedText;

...

HBCoreTextView*coreTextView2=[[HBCoreTextView alloc]initWithFrame:rect];

attributedText1.iOSDrawingRect=rect1;

attributedText2.iOSDrawingRect=rect2;

coreTextView2.arrAttributedText=@[attributedText1,attributedText2];

在本实施例中,基于iOS的文本渲染引擎HBCoreText通过高度封装基础绘图引擎,对外提供少量绘制接口,为iOS的应用开发提供了一套完整的文本渲染方案;相比于现有技术,解决了客户端界面布局复杂的问题,有利于提供开发效率。

进一步地,在一实施例中,文本渲染引擎还包括:基于位图的轻量事件响应单元,用于对界面上的人机交互事件进行响应,并包括针对所述人机交互事件进行响应的处理函数。

由于经过本文本渲染引擎,界面展示从传统的视图树转变为一张位图;而位图不能响应、区分内部具体位置的点击事件;因此,HBCoreText提供了基于位图的轻量事件交互单元,可以准确识别点击位置发生在位图的哪一块“绘制单元”内。具体地,使用HBCoreText为某一视觉展示添加响应事件和对应的处理函数即可实现。

在本实施例中,通过添加处理函数使得渲染后的界面具有人机互动的功能,及时响应如点击事件、滑动事件等;而添加过程如同使用原生系统UIButton添加事件一样简单,便于快速扩展功能。

在一实施例中,提供一种基于iOS的文本渲染方法,基于上述文本渲染引擎对待渲染的富文本对象进行处理,其流程图如图2所示,并包括如下步骤:

S1:当获取待显示到界面上的富文本对象时,通过可变属性字符串扩展类对富文本对象生成一待绘制对象,并计算实际绘制待绘制对象所需要的矩形区域。

其中,富文本对象即对象化的待渲染富文本。具体地,先通过可变属性字符串扩展类NSMutableAttributedString生成NSMutableAttributedText对象;再计算实际绘制NSMutableAttributedText所需要的矩形区域的大小。

S2:通过文字附件类、段落式样类对待绘制对象配置绘制参数。

具体地,通过文字附件类HBCoreTextParagraphStyle和段落式样类HBCoreTextParagraphStyle分别设置NSMutableAttributedText的具体绘制参数,如图像、视图位置,文本对齐方式,文本绘制方向等等。

S3:视图显示类根据绘制参数实例化待绘制对象,并通过实例生成类将富文本对象绘制到界面上。

具体地,先使用视图显示类HBCoreTextView根据步骤S2中的绘制参数生成对应NSMutableAttributedText的视图实例;然后通过实例生成类(HBCoreTextGlyphRun、HBCoreTextLayoutLine、HBCoreTextLayoutFrame)赋值NSMutableAttributedText对象,以确定绘制区域,并生成最后绘制界面需要的CTRunRef、CTLineRef、CTFrameRef对象,从而完成绘制。

在本实施例中,由于基于iOS的文本渲染引擎HBCoreText是支持异步化处理的,即,从计算矩形区域、样式排版渲染、图片解码,再到绘制,实现了全程异步化以保障线程安全的同时;高度封装的绘制接口实现了快速渲染,即,整个渲染过程除了有些特殊的视图外完全没有使用原生(UIKit)控件,最终产出的结果为一张视图层级位图(Bitmap),数量大幅降低,产出简单;HBCoreText并发进行多个画板视图的渲染、显示工作,利用图文混排达到了内存占用低、渲染速度快的效果。

进一步地,在一实施例中,基于iOS的文本渲染方法还包括步骤:

S4:当界面上的位图接收到点击事件时,基于位图的轻量事件响应单元获取点击位置所在的坐标,并调用相应的处理函数进行响应。

具体地,在HBCoreText中添加事件处理函数作为响应接口即可。当用户触发点击事件,由于处理函数已经注册,因此,处理函数将对该事件进行及时响应。

在本实施例中,响应人机交互事件依托于基于位图的轻量事件响应单元,使得可以准确识别人机交互事件,如点击位置发生的位置等;有利于丰富App的人机交互功能。

在一实施例中,提供一种基于iOS的文本渲染装置,对iOS系统的基础绘图引擎进行了封装,用于绘制App界面。该基于iOS的文本渲染装置与上述实施例中基于iOS的文本渲染方法一一对应,此处不再赘述。

在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述实施例中基于iOS的文本渲染方法的步骤,例如图2所示的步骤S1至步骤S3。或者,处理器执行计算机程序时实现上述实施例中基于iOS的文本渲染装置的各模块/单元的功能,为避免重复,这里不再赘述。

在一实施例中,提供一计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述方法实施例中基于iOS的文本渲染方法,或者,该计算机程序被处理器执行时实现上述装置实施例中基于iOS的文本渲染装置中各模块/单元的功能。为避免重复,这里不再赘述。

以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。

相关技术
  • 基于iOS的文本渲染引擎、方法、装置、设备及介质
  • 基于文本摘要的文本分类方法、装置、电子设备及介质
技术分类

06120112986780