发明内容
本公开实施例至少提供图文绘制结果的展示方法、装置、计算机设备及存储介质,可以在图文绘制过程中减少对系统功耗的消耗,从而降低对系统资源的消耗量。
第一方面,本公开实施例提供了一种图文绘制结果的展示方法,所述展示方法包括:
获取待绘制单元中的至少一个待绘制内容,以及每个待绘制内容的绘制属性;
按照每个所述待绘制内容的绘制属性,依次在目标图形上下文中绘制每个所述待绘制内容,生成目标视图图层对象;
将所述目标视图图层对象作为图文绘制结果进行展示。
一种可选的实施方式中,所述按照每个所述待绘制内容的绘制属性,依次在目标图形上下文中绘制每个所述待绘制内容,生成目标视图图层对象,包括:
从预先创建的子线程队列中,确定绘制所述待绘制单元的目标子线程;
通过所述目标子线程开启与所述待绘制单元的尺寸相同的所述目标图形上下文;
按照每个所述待绘制内容的绘制属性,通过所述目标子线程,在所述目标图形上下文中依次绘制每个所述待绘制内容,生成所述目标视图图层对象;
所述将所述目标视图图层对象作为图文绘制结果进行展示,包括:
将所述目标视图图层对象传输至主线程,通过所述主线程将所述目标视图图层对象作为所述图文绘制结果进行展示。
一种可选的实施方式中,针对任一所述待绘制内容,根据以下步骤在所述目标图形上下文中绘制所述待绘制内容:
根据所述待绘制内容,以及与所述待绘制内容对应的绘制属性,生成富文本类对象;
调用图文绘制函数,并依据所述富文本类对象,在所述目标图形上下文中的目标位置上绘制所述待绘制内容;
其中,所述目标位置为预先设置的所述待绘制内容在所述目标图形上下文中的位置。
一种可选的实施方式中,所述按照每个所述待绘制内容的绘制属性,通过所述目标子线程,在所述目标图形上下文中依次绘制每个所述待绘制内容,生成所述目标视图图层对象,包括:
按照每个所述待绘制内容的绘制属性,依次在目标图形上下文中绘制每个所述待绘制内容后,生成图文绘制图片;
将所述图文绘制图片存储至预先定义的初始图层对象中,生成所述目标视图图层对象。
一种可选的实施方式中,若所述待绘制内容为图片,所述调用图文绘制函数,并依据所述富文本类对象,在所述目标图形上下文中的目标位置上绘制所述待绘制内容,包括:
根据所述富文本类对象,生成视图对象;
调用所述图文绘制函数,并依据所述视图对象的对象信息,在所述目标图形上下文中的目标位置上绘制所述待绘制内容。
一种可选的实施方式中,在所述将所述目标视图图层对象作为图文绘制结果进行展示之后,所述展示方法还包括:
响应于点击操作,获取所述点击操作的坐标位置;
根据所述坐标位置,确定被点击的所述图文绘制结果中的目标控件;
执行与所述目标控件对应的预设动作。
一种可选的实施方式中,所述绘制属性包括以下属性信息中的至少一种:
文本的颜色、文本的字体大小、文本的字体类型、文本在所述目标图形上下文中的位置坐标、文本的尺寸大小、图片的形状、图片的大小、图片在所述目标图形上下文中的位置坐标。
一种可选的实施方式中,在所述获取待绘制单元中的至少一个待绘制内容,以及每个待绘制内容的绘制属性之后,所述展示方法还包括:
获取所述待绘制单元对应的绘制标识变量的初始值;
所述按照每个所述待绘制内容的绘制属性,依次在目标图形上下文中绘制每个所述待绘制内容,生成目标视图图层对象,包括:
在确定所述绘制标识变量的当前值与所述初始值相同时,按照每个所述待绘制内容的绘制属性,依次在目标图形上下文中绘制每个所述待绘制内容,生成目标视图图层对象。
第二方面,本公开实施例还提供一种图文绘制结果的展示装置,所述展示装置包括:
第一获取模块,用于获取待绘制单元中的至少一个待绘制内容,以及每个待绘制内容的绘制属性;
绘制模块,用于按照每个所述待绘制内容的绘制属性,依次在目标图形上下文中绘制每个所述待绘制内容,生成目标视图图层对象;
展示模块,用于将所述目标视图图层对象作为图文绘制结果进行展示。
一种可选的实施方式中,所述绘制模块包括:
确定单元,用于从预先创建的子线程队列中,确定绘制所述待绘制单元的目标子线程;
开启单元,用于通过所述目标子线程开启与所述待绘制单元的尺寸相同的所述目标图形上下文;
绘制单元,用于按照每个所述待绘制内容的绘制属性,通过所述目标子线程,在所述目标图形上下文中依次绘制每个所述待绘制内容,生成所述目标视图图层对象;
展示单元,用于将所述目标视图图层对象传输至主线程,通过所述主线程将所述目标视图图层对象作为所述图文绘制结果进行展示。
一种可选的实施方式中,针对任一所述待绘制内容,所述绘制模块,具体用于根据以下步骤在所述目标图形上下文中绘制所述待绘制内容:
根据所述待绘制内容,以及与所述待绘制内容对应的绘制属性,生成富文本类对象;
调用图文绘制函数,并依据所述富文本类对象,在所述目标图形上下文中的目标位置上绘制所述待绘制内容;
其中,所述目标位置为预先设置的所述待绘制内容在所述目标图形上下文中的位置。
一种可选的实施方式中,所述绘制单元,用于根据以下步骤生成所述目标视图图层对象:
按照每个所述待绘制内容的绘制属性,依次在目标图形上下文中绘制每个所述待绘制内容后,生成图文绘制图片;
将所述图文绘制图片存储至预先定义的初始图层对象中,生成所述目标视图图层对象。
一种可选的实施方式中,若所述待绘制内容为图片,所述绘制模块,具体用于根据以下步骤绘制所述待绘制内容:
根据所述富文本类对象,生成视图对象;
调用所述图文绘制函数,并依据所述视图对象的对象信息,在所述目标图形上下文中的目标位置上绘制所述待绘制内容。
一种可选的实施方式中,所述展示装置还包括:
第二获取模块,用于响应于点击操作,获取所述点击操作的坐标位置;
确定模块,用于根据所述坐标位置,确定被点击的所述图文绘制结果中的目标控件;
执行模块,用于执行与所述目标控件对应的预设动作。
一种可选的实施方式中,所述绘制属性包括以下属性信息中的至少一种:
文本的颜色、文本的字体大小、文本的字体类型、文本在所述目标图形上下文中的位置坐标、文本的尺寸大小、图片的形状、图片的大小、图片在所述目标图形上下文中的位置坐标。
一种可选的实施方式中,所述第一获取模块,还用于获取所述待绘制单元对应的绘制标识变量的初始值;
所述绘制模块,用于在确定所述绘制标识变量的当前值与所述初始值相同时,按照每个所述待绘制内容的绘制属性,依次在目标图形上下文中绘制每个所述待绘制内容,生成目标视图图层对象。
第三方面,本公开实施例还提供一种计算机设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当计算机设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
第四方面,本公开实施例还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
本公开实施例提供的图文绘制结果的展示方法、装置、计算机设备及存储介质,通过将待绘制单元中的所有待绘制单元均绘制在同一个图形上下文中,与现有技术中将各个待绘制单元分别绘制在不同的图像上下文中相比,可以大大减小对视图层级进行创建的数量,可以在图文绘制过程中减少对系统功耗的消耗,从而降低对系统资源的消耗量。
进一步,本公开实施例提供的图文绘制结果的展示方法,通过目标子线程开启与目标图形上下文,并按照每个待绘制内容的绘制属性,通过目标子线程在目标图形上下文中依次绘制每个待绘制内容,生成目标视图图层对象,进而,将目标视图图层对象传输至主线程,通过主线程将目标视图图层对象作为图文绘制结果进行展示,本公开实施例将绘制和布局待绘制单元的任务交由各个子线程来完成,各个子线程可以并行执行绘制任务,从而在减轻主线程的压力的同时,可以提升整体绘制效率。
为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
经研究发现,在进行用户界面设计时,包含对图片和文字的绘制。在对用户界面进行图文绘制过程中,由于绘制文字、图片以及布局耗时较长,因此,在进行图文绘制过程中对系统功耗的消耗较高,需要消耗大量的系统资源。
基于上述研究,本公开提供了图文绘制结果的展示方法、装置、计算机设备及存储介质,通过获取待绘制单元中的至少一个待绘制内容,以及每个待绘制内容的绘制属性,按照每个所述待绘制内容的绘制属性,依次在目标图形上下文中绘制每个所述待绘制内容,生成目标视图图层对象,将目标视图图层对象作为图文绘制结果进行展示。基于上述方式,本公开通过将待绘制单元中的所有待绘制单元均绘制在同一个图形上下文中,这样,可以大大减小对视图层级进行创建的数量,可以在图文绘制过程中减少对系统功耗的消耗,从而降低对系统资源的消耗量。
本公开阐述的方案,均是发明人在经过实践并仔细研究后得出的结果,因此,上述问题的发现过程以及下文中本公开针对上述问题所提出的解决方案,都应该是发明人对本公开做出的贡献。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
为便于对本实施例进行理解,首先对本公开实施例所公开的图文绘制结果的展示方法进行详细介绍,本公开实施例所提供的图文绘制结果的展示方法的执行主体一般为具有一定计算能力的计算机设备,该计算机设备例如包括:终端设备或服务器或其它处理设备,终端设备可以为用户设备(User Equipment,UE)、移动设备、用户终端、终端、蜂窝电话、无线电话、个人数字处理(Personal Digital Assistant,PDA)、手持设备、计算设备、车载设备、可穿戴设备等。在一些可能的实现方式中,该图文绘制结果的展示方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
下面以执行主体为终端设备为例对本公开实施例提供的图文绘制结果的展示方法加以说明。
实施例一
参见图1所示,为本公开实施例提供的一种图文绘制结果的展示方法的流程图,所述方法包括步骤S101~S103,其中:
S101:获取待绘制单元中的至少一个待绘制内容,以及每个待绘制内容的绘制属性。
在该步骤中,在接收到对待绘制单元进行展示的任务时,先需要对待绘制单元进行绘制,并在完成绘制后进行展示,在绘制前,需要获取待绘制单元包含的各个待绘制内容,以及每个待绘制单元的绘制属性,只有获取到上述信息后,才能完成对待绘制单元的绘制。
这里,待绘制单元是指需要绘制及显示在终端设备上的一个单元的内容,待绘制单元包括至少一个待绘制内容;待绘制内容为最小单位的进行绘制的元素,待绘制内容可以为文本,也可以为图片;绘制属性是指绘制过程中待绘制内容的绘制样式。其中,待绘制内容和绘制属性是UI设计人员预先进行设置的,终端设备在接收到绘制任务时,可以获取到待绘制单元中各个待绘制内容,以及每个待绘制内容的绘制属性。
这里,绘制属性是指绘制过程中待绘制内容的绘制样式,不同待绘制内容,具有的绘制属性会有所不同,若待绘制内容为图片,则该待绘制内容的绘制属性包括图片的形状、图片的大小、图片在所述目标图形上下文中的位置坐标;若待绘制内容为文本,则该待绘制内容的绘制属性包括文本的颜色、文本的字体大小、文本的字体类型、文本在目标图形上下文中的位置坐标、文本的尺寸大小。
S102:按照每个所述待绘制内容的绘制属性,依次在目标图形上下文中绘制每个所述待绘制内容,生成目标视图图层对象。
在该步骤中,在获取到待绘制单元的各个待绘制内容,以及每个待绘制内容之后,执行对待绘制单元的绘制任务,具体地,先开启一个目标图形上下文,并按照预设的绘制顺序,以及每个待绘制内容的绘制属性,依次在目标图形上下文中绘制待绘制单元中的每个待绘制内容,在完成对待绘制单元的绘制后,生成目标视图图层对象。
需要说明的是,预设的绘制顺序可以通过待绘制单元中各个待绘制内容之间的关联确定的,关联关系比如位置关系,位置比如上、下、左、右,通过设置绘制顺序可以防止在对待绘制单元进行绘制过程中出错。
这里,图形上下文(graphics context,GC)是用来完成绘制的,作用相当于“画布”。视图是用户可见的对象,如按钮,文本字段和滑块,视图对象组成应用程序的UI,一旦创建了视图层级,它将被绘制到屏幕上,层级中的每个视图自身绘制,将自身渲染到其图层,将其视为位图图像,所有视图的图层在屏幕上合成在一起。
需要说明的是,本公开通过将待绘制单元中的所有待绘制内容均绘制在同一个图形上下文中,这样,一个待绘制单元对应一个视图层级,可以使GPU避免将多张待绘制内容对应的视图图层合成和渲染的消耗,更少的视图图层也意味着更少的内存占用,与将每个待绘制单元的各个待绘制单元分别绘制在不同的图像上下文中相比,可以大大减小对视图层级进行创建的数量,而视图层级越少,绘制布局耗时越少,从而减小对资源的消耗。
进一步地,以待绘制单元中的任意一个待绘制内容为例,对该待绘制内容的绘制过程进行阐述,也即,针对任一所述待绘制内容,根据以下步骤在所述目标图形上下文中绘制所述待绘制内容:
步骤a1:根据所述待绘制内容,以及与所述待绘制内容对应的绘制属性,生成富文本类对象。
在该步骤中,在获取到待绘制内容,以及待绘制内容的绘制属性之后,需要先将该待绘制内容,以及该待绘制内容的绘制进行存储,只有在存储后,才能用于后续的绘制,并以生成的富文本类对象的形式进行调用。
步骤a2:调用图文绘制函数,并依据所述富文本类对象,在所述目标图形上下文中的目标位置上绘制所述待绘制内容。其中,所述目标位置为预先设置的所述待绘制内容在所述目标图形上下文中的位置。
在该步骤中,在对待绘制内容进行绘制时,可以先调用图文绘制函数,并依据该待绘制内容对应的富文本类对象,在目标图形上下文中的目标位置上绘制所述待绘制内容。
进一步地,待绘制内容可以为图片或文本,绘制不同类型的绘制内容所采用方法不同,下面对待绘制内容为图片的情况进行阐述,也即,步骤a2中调用图文绘制函数,并依据所述富文本类对象,在所述目标图形上下文中的目标位置上绘制所述待绘制内容,包括以下步骤:
根据所述富文本类对象,生成视图对象;调用所述图文绘制函数,并依据所述视图对象的对象信息,在所述目标图形上下文中的目标位置上绘制所述待绘制内容。
在该步骤中,针对待绘制内容为图片的情况,需要将该待绘制内容的富文本类对象先转换为视图对象,并调用图文绘制函数,以及依据视图对象的对象信息,在目标图形上下文中的目标位置上绘制所述待绘制内容。在具体作业时,可以通过视图对象提供的drawInRect方法(视图绘制方法),将图片绘制到当前图形上下文指定位置、大小上。
这里,针对待绘制内容为文本的情况,在具体作业时,对于文本绘制,若使用TextKit框架(文本布局工具)实现,可以通过NSLayoutManager(文字编辑排版处理工具)提供的drawGlyphsForGlyphRange:atPoint方法(字形绘制方法)和drawBackgroundForGlyphRange:atPoint方法(背景绘制方法)共同进行绘制。
进一步地,通常,UI绘制和布局都是在主线程上进行的,所有的UI操作都需要在主线程上进行,这样,就使得主线程需要处理太多的事情,当其处理不过来时,在用户操作终端设备滑动显示界面上的内容时,就会出现卡顿掉帧的现象,而现在的终端设备大多是多核多处理器的,可以提供多个线程,对此,本公开将绘制和布局均放在子线程进行处理,从而为主线程腾出资源。也即,步骤S102中按照每个所述待绘制内容的绘制属性,依次在目标图形上下文中绘制每个所述待绘制内容,生成目标视图图层对象,包括以下步骤:
步骤b1:从预先创建的子线程队列中,确定绘制所述待绘制单元的目标子线程。
在该步骤中,可以在预先创建的子线程队列中,选取适合绘制待绘制单元的目标子线程,这里,终端设备能够提供的子线程的数量是根据终端设备的配置(如多核处理器)来确定的,选取的目标子线程可以是没有被占用的子线程,即空闲的子线程。
需要说明的是,终端设备可以同时绘制多个待绘制单元,每个待绘制单元可以用一个子线程来处理,即,实现异步绘制,这样,可以大大减轻主线程的压力。当异步绘制时,通过预先建立的队列管理池来管理处理异步绘制时的子线程队列,避免同一时刻存在过多的子线程同时运行、创建、销毁,而当大量子线程同时创建、运行、销毁时,这些操作也会挤占主线程的CPU资源,会带来额外的性能开销。
步骤b2:通过所述目标子线程开启与所述待绘制单元的尺寸相同的所述目标图形上下文。
在该步骤中,在确定处理待绘制单元的目标子线程后,先通过目标子线程开启目标图形上下文,要求开启的目标图形上下文的尺寸与待绘制单元的尺寸相同,这里的尺寸相同包含大小、形状上的相同,在具体作业时,可以通过预设的图形上下文开启方法开启,可以采用UIGraphicsBeginImageContextWithOptions(size,opaque,scale)方法(用户界面原始图形上下文绘图方法)来开启一个指定大小的图形上下文。
步骤b3:按照每个所述待绘制内容的绘制属性,通过所述目标子线程,在所述目标图形上下文中依次绘制每个所述待绘制内容,生成所述目标视图图层对象。
在该步骤中,可以按照每个待绘制内容的绘制属性,使用目标子线程,在开启的目标图形上下文中依次绘制待绘制单元中的各个待绘制内容,在绘制完成待绘制单元后,生成带有待绘制单元的内容的目标视图图层对象。在具体作业时,可以通过预设的视图图层对象的获取方法获取生成的目标视图图层对象,可以采用UIGraphicsGetImageFromCurrentImageContext方法(获取用户界面当前图形上下文绘图方法)来获取生成的目标视图图层对象。其中,目标视图图层对象为UIImage对象(用户界面图形对象)。
进一步地,步骤b3中按照每个所述待绘制内容的绘制属性,通过所述目标子线程,在所述目标图形上下文中依次绘制每个所述待绘制内容,生成所述目标视图图层对象,包括以下步骤:
按照每个所述待绘制内容的绘制属性,依次在目标图形上下文中绘制每个所述待绘制内容后,生成图文绘制图片;将所述图文绘制图片存储至预先定义的初始图层对象中,生成所述目标视图图层对象。
在该步骤中,在绘制待绘制单元时,按照待绘制单元中的每个待绘制内容的绘制属性,依次在目标图形上下文中绘制待绘制内容,并在完成对待绘制单元的绘制后,先生成一个带有待绘制单元的内容和绘制属性的图文绘制图片,通过将图文绘制图片存储在预先定义的初始图层对象中,可以得到目标视图图层对象。
S103:将所述目标视图图层对象作为图文绘制结果进行展示。
在该步骤中,在图形上下文中完成对待绘制单元的绘制后,生成目标视图图层对象,可以将生成的目标视图图层对象作为图文绘制结果进行展示,这样,就完成在终端设备上展示待绘制单元的实施过程。
进一步地,在获取到生成的目标视图图层对象之后,关闭目标图形上下文,具体地,可以采用UIGraphicsEndImageContext方法(用户界面最终图形上下文绘图方法)关闭目标图形上下文,并由目标子线程切回主线程,以便图文绘制结果在主线程上进行展示,也即,步骤S103中将所述目标视图图层对象作为图文绘制结果进行展示,包括:
将所述目标视图图层对象传输至主线程,通过所述主线程将所述目标视图图层对象作为所述图文绘制结果进行展示。
在该步骤中,为了实现图文高效绘制,降低主线程的性能消耗,本公开将图文绘制的过程设置在子线程中绘制,以便不影响主线程的操作。而子线程中的图文绘制完毕生成图文绘制结果后,需要将该图文绘制结果传回至主线程以便进行显示,所以本公开中设置了回调操作,即将生成的目标视图图层对象传输至主线程,在将目标视图图层对象转换为适合进行展示的格式的图文绘制结果进行展示。
在本公开实施例中,通过获取待绘制单元中的至少一个待绘制内容,以及每个待绘制内容的绘制属性,按照每个所述待绘制内容的绘制属性,依次在目标图形上下文中绘制每个所述待绘制内容,生成目标视图图层对象,将目标视图图层对象作为图文绘制结果进行展示。基于上述方式,本公开通过将待绘制单元中的所有待绘制单元均绘制在同一个图形上下文中,这样,可以大大减小对视图层级进行创建的数量,可以在图文绘制过程中减少对系统功耗的消耗,从而降低对系统资源的消耗量。
实施例二
参见图2所示,为本公开实施例提供的另一种图文绘制结果的展示方法的流程图,所述方法包括步骤S201~S206,其中:
S201:获取待绘制单元中的至少一个待绘制内容,以及每个待绘制内容的绘制属性。
S202:按照每个所述待绘制内容的绘制属性,依次在目标图形上下文中绘制每个所述待绘制内容,生成目标视图图层对象。
S203:将所述目标视图图层对象作为图文绘制结果进行展示。
S204:响应于点击操作,获取所述点击操作的坐标位置。
在该步骤中,在绘制完成待绘制单元,并将待绘制单元对应的图文绘制结果进行展示后,若接收到针对图文绘制结果的点击操作,先获取该点击操作对应的点击处的坐标位置。
S205:根据所述坐标位置,确定被点击的所述图文绘制结果中的目标控件。
在该步骤中,根据该点击处的坐标位置,确定出被点击的图文绘制结果中的目标控件,这里,图文绘制结果包括至少一个控件,每个控件与待绘制单元中的待绘制内容相对应,即控件为待绘制内容会之后生成的,可以响应点击事件的控件。
这里,对点击事件的处理过程进行阐述,可以事先对待绘制单元中的各个待绘制内容从上至下连接起来,行成一个链,叫做响应者链,以点击BDTPainterVisionElement001待绘制内容(异步视图元素001)对应的控件为例,查找事件处理元素从容器BDTPainterAsyncView(负责承载视图元素的容器)开始接收到触摸事件开始处理,自上而下查找过程如下:
判断点击操作的坐标位置,在查找到BDTPainterVisionElement0(异步视图元素0)的待绘制内容对应的控件后,进一步判断是在BDTPainterVisionElement00(异步视图元素00)对应的控件还是BDTPainterVisionElement01(异步视图元素01)对应的控件待绘制内容,最终得到在BDTPainterVisionElement00待绘制内容对应的控件,再进一步判断是在BDTPainterVisionElement00待绘制内容下面BDTPainterVisionElement000(异步视图元素000)待绘制内容对应的控件还是BDTPainterVisionElement001待绘制内容对应的控件,最终在BDTPainterVisionElement001待绘制内容对应的控件。通常,现有技术中采用事件传递链,从点击屏幕开始,直到找到最合适的待绘制内容的控件,但是找到的待绘制内容的控件不一定能处理这个点击事件,比如找到的最上的待绘制内容的控件只是一个普通显示文本,没有点击功能,而它的上一级待绘制内容的控件有处理能力,则需要交给它的待绘制内容的控件进行点击事件的处理。
本公开在任何一步的待绘制内容的控件能处理点击事件则进行事件处理,并中止后面的查找了,如果都不能处理就进一步交给终端设备去判断了,看看是不是其他终端设备的视图对象需要处理,或者这次点击可以不处理。
S206:执行与所述目标控件对应的预设动作。
在该步骤中,在确定出响应点击事件的目标控件后,执行目标控件对应的预设动作,预设动作比如跳转页面动作。
进一步地,在绘制过程中,可能出现用户退出当前页面了,或者把当前绘制的内容划出屏幕了,故,本公开为每个待绘制单元分配一个绘制标识变量,在绘制前记录下这个变量的初始值,如果这个绘制标识变量的值发生变化,则不进行绘制,若没有变化,则进行绘制,这里,绘制标识变量即为哨兵变量,待绘制单元对应的绘制标识变量用于表征是否需要绘制该待绘制单元,具体地,在所述获取待绘制单元中的至少一个待绘制内容,以及每个待绘制内容的绘制属性之后,获取所述待绘制单元对应的绘制标识变量的初始值;在确定所述绘制标识变量的当前值与所述初始值相同时,按照每个所述待绘制内容的绘制属性,依次在目标图形上下文中绘制每个所述待绘制内容,生成目标视图图层对象。
在该步骤中,可以将待绘制单元的绘制标识变量的初始值设为0,在绘制过程中判断这个变量值是否发生变化,没有变化则认为继续绘制是有效的,否则认为绘制无意义,比如,在用户退出页面了,或者把当前绘制的内容划出屏幕了,就会更改该变量值,可以将变量值加1,然后判断绘制标识变量的当前值与之前初始值不同就认为,此次绘制过程不需要再继续了,以避免浪费CPU资源。
其中,S201至S203的描述可以参照S101至S103的描述,并且能达到相同的技术效果,对此不做赘述。
在本公开实施例中,获取待绘制单元中的至少一个待绘制内容,以及每个待绘制内容的绘制属性,按照每个所述待绘制内容的绘制属性,依次在目标图形上下文中绘制每个所述待绘制内容,生成目标视图图层对象,将目标视图图层对象作为图文绘制结果进行展示。基于上述方式,本公开通过将待绘制单元中的所有待绘制单元均绘制在同一个图形上下文中,这样,可以大大减小对视图层级进行创建的数量,可以在图文绘制过程中减少对系统功耗的消耗,从而降低对系统资源的消耗量。
图3示出了本公开实施例中展示绘制完成的图文绘制结果的示意图;由图3可知,图文绘制结果对应的待绘制单元包括12个待绘制内容,分别是图像1、文本1、文本2、文本3、文本4(正文文章)、图像2(正文图片)、转发、转发文本数(12)、评论、评论文本数(25)、点赞、点赞文本数(52)。
需要说明的是,本公开可以采用文本布局工具,比如,Text Kit框架、Core Text框架来完成绘制,这里,对于移动终端为移动操作系统(IPhone Operation System,IOS)而言,IOS开发大多是使用面向对象的编程语言(Objective-C,OC)的,而Core Text框架是以C语言API方式提供文本布局和渲染接口的,C语言和OC语言是两种不同的语言。Text Kit框架对IOS OC开发者较友好,具体体现在Text Kit框架是对Core Text框架的封装,并且对外提供了一套面向对象的、对开发者更加友好的OC语言API,且维护成本更低,因而对于IOS端文本布局一般用Text Kit框架来进行布局,在Core Text框架上操作一些对象需要手动管理对象的内存分配和释放情况,而使用Text Kit框架完全不用考虑这些,由系统提供ARC(自动的引用计数)来保证对象的正确生成与释放。
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
基于同一发明构思,本公开实施例中还提供了与图文绘制结果的展示方法对应的图文绘制结果的展示装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上述图文绘制结果的展示方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
实施例三
参见图4至图6所示,图4示出了本公开实施例所提供的一种图文绘制结果的展示装置400的示意图之一;图5示出了本公开实施例所提供的图文绘制结果的展示装置400中,绘制模块420的具体示意图;图6示出了本公开实施例所提供的一种图文绘制结果的展示装置400的示意图之二。
如图4所示,所述图文绘制结果的展示装置400包括:
第一获取模块410,用于获取待绘制单元中的至少一个待绘制内容,以及每个待绘制内容的绘制属性;
绘制模块420,用于按照每个所述待绘制内容的绘制属性,依次在目标图形上下文中绘制每个所述待绘制内容,生成目标视图图层对象;
展示模块430,用于将所述目标视图图层对象作为图文绘制结果进行展示。
一种可选的实施方式中,如图5所示,所述绘制模块420包括:
确定单元421,用于从预先创建的子线程队列中,确定绘制所述待绘制单元的目标子线程;
开启单元422,用于通过所述目标子线程开启与所述待绘制单元的尺寸相同的所述目标图形上下文;
绘制单元423,用于按照每个所述待绘制内容的绘制属性,通过所述目标子线程,在所述目标图形上下文中依次绘制每个所述待绘制内容,生成所述目标视图图层对象;
展示单元424,用于将所述目标视图图层对象传输至主线程,通过所述主线程将所述目标视图图层对象作为所述图文绘制结果进行展示。
一种可选的实施方式中,如图4所示,针对任一所述待绘制内容,所述绘制模块420,具体用于根据以下步骤在所述目标图形上下文中绘制所述待绘制内容:
根据所述待绘制内容,以及与所述待绘制内容对应的绘制属性,生成富文本类对象;
调用图文绘制函数,并依据所述富文本类对象,在所述目标图形上下文中的目标位置上绘制所述待绘制内容;
其中,所述目标位置为预先设置的所述待绘制内容在所述目标图形上下文中的位置。
一种可选的实施方式中,如图5所示,所述绘制单元423,用于根据以下步骤生成所述目标视图图层对象:
按照每个所述待绘制内容的绘制属性,依次在目标图形上下文中绘制每个所述待绘制内容后,生成图文绘制图片;
将所述图文绘制图片存储至预先定义的初始图层对象中,生成所述目标视图图层对象。
一种可选的实施方式中,如图4所示,若所述待绘制内容为图片,所述绘制模块420,具体用于根据以下步骤绘制所述待绘制内容:
根据所述富文本类对象,生成视图对象;
调用所述图文绘制函数,并依据所述视图对象的对象信息,在所述目标图形上下文中的目标位置上绘制所述待绘制内容。
一种可选的实施方式中,如图6所示,所述图文绘制结果的展示装置400还包括:
第二获取模块440,用于响应于点击操作,获取所述点击操作的坐标位置;
确定模块450,用于根据所述坐标位置,确定被点击的所述图文绘制结果中的目标控件;
执行模块460,用于执行与所述目标控件对应的预设动作。
一种可选的实施方式中,所述绘制属性包括以下属性信息中的至少一种:
文本的颜色、文本的字体大小、文本的字体类型、文本在所述目标图形上下文中的位置坐标、文本的尺寸大小、图片的形状、图片的大小、图片在所述目标图形上下文中的位置坐标。
一种可选的实施方式中,如图4所示,所述第一获取模块410,还用于获取所述待绘制单元对应的绘制标识变量的初始值;
所述绘制模块420,用于在确定所述绘制标识变量的当前值与所述初始值相同时,按照每个所述待绘制内容的绘制属性,依次在目标图形上下文中绘制每个所述待绘制内容,生成目标视图图层对象。
在本公开的实施例中,通过获取待绘制单元中的至少一个待绘制内容,以及每个待绘制内容的绘制属性,按照每个所述待绘制内容的绘制属性,依次在目标图形上下文中绘制每个所述待绘制内容,生成目标视图图层对象,将目标视图图层对象作为图文绘制结果进行展示。基于上述方式,本公开通过将待绘制单元中的所有待绘制单元均绘制在同一个图形上下文中,这样,可以大大减小对视图层级进行创建的数量,可以在图文绘制过程中减少对系统功耗的消耗,从而降低对系统资源的消耗量。
关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
实施例四
基于同一技术构思,本公开实施例还提供了一种计算机设备。参照图7所示,为本公开实施例提供的计算机设备700的结构示意图,包括处理器701、存储器702、和总线703。其中,存储器702用于存储执行指令,包括内存7021和外部存储器7022;这里的内存7021也称内存储器,用于暂时存放处理器701中的运算数据,以及与硬盘等外部存储器7022交换的数据,处理器701通过内存7021与外部存储器7022进行数据交换,当计算机设备700运行时,处理器701与存储器702之间通过总线703通信,使得处理器701在执行以下指令:
获取待绘制单元中的至少一个待绘制内容,以及每个待绘制内容的绘制属性;
按照每个所述待绘制内容的绘制属性,依次在目标图形上下文中绘制每个所述待绘制内容,生成目标视图图层对象;
将所述目标视图图层对象作为图文绘制结果进行展示。
实施例五
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的图文绘制结果的展示方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
本公开实施例所提供的图文绘制结果的展示方法的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行上述方法实施例中所述的图文绘制结果的展示方法的步骤,具体可参见上述方法实施例,在此不再赘述。
本公开实施例还提供一种计算机程序,该计算机程序被处理器执行时实现前述实施例的任意一种方法。该计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software DevelopmentKit,SDK)等等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。