发明内容
为克服上述图文混排中代码重复编写,开发效率低且占用内存高的问题或者至少部分地解决上述问题,本发明提供了一种图文混排方法及装置。
根据本发明的第一方面,提供一种图文混排方法,包括:
S1,定义一个对象类,在所述对象类中将目标图片的信息和目标文字定义为所述对象类的属性;
S2,对所述对象类进行实例化生成一个或多个第一对象,根据所述第一对象生成数组;
S3,创建一个工具类,在所述工具类中以类方法的方式定义一个接口方法,在所述接口方法中根据所述数组对所述目标图片和所述目标文字进行图文混排。
具体地,所述目标图片的信息包括所述目标图片的占位图片、预设大小、内间距、是否显示所述目标图片和所述目标图片中的一种或多种。
具体地,所述步骤S3具体包括:
S31,在所述接口方法中调用alloc和init方法,创建一个NSMutableAttributedString类型的第二对象;
S32,在所述第二对象中创建一个for循环,使用所述for循环遍历所述数组中的各第一对象;
S33,对于每个所述第一对象,对该对象中的目标图片和目标文字进行图文混排。
具体地,所述步骤S33具体包括:
S331,在所述接口方法中封装一个类方法,在所述类方法中调用图片缩放方法将每个所述第一对象中的目标图片的大小缩放为所述预设大小;
S332,调用alloc和init方法,使用NSTextAttachment类创建一个第三对象,将缩放后的所述目标图片作为所述第三对象的image属性,将所述预设大小作为所述第三对象的bounds属性;
S333,调用NSAttributedString类中的attributedStringWithAttachment方法,将缩放后的所述目标图片转化为字符串类型,返回字符串类型的所述第三对象。
具体地,所述步骤S333还包括:
调用NSMutableAttributedString类中的内存分配函数,创建一个空的字符串;
对所述空的字符串使用initWithString方法构建一个富文本,在所述富文本中设置所述目标文字的字体颜色和字体大小;其中,所述富文本的参数为字典,所述字典包括字体大小和字体颜色,所述字体大小通过systemFontOfSize函数获得,所述字体颜色通过UIColor类获得。
具体地,所述步骤S33具体包括:
若各所述第一对象中是否显示所述目标图片的值为是,则判断各所述第一对象中的目标图片是否存在;
若所述第一对象中的目标图片存在,则调用appendAttributedString方法将转化为NSAttributedString类型的所述目标图片拼接到所述第二对象中;或者,
若所述第一对象中的目标图片不存在,则判断所述第一对象中所述目标图片的占位图片是否存在;
若所述目标图片的占位图片存在,则调用appendAttributedString方法将转换为NSAttributedString类型的所述占位图片拼接到所述第二对象中。
具体地,所述步骤S33具体包括:
若所述目标图片的内间距存在,则将所述目标图片的内间距转化为间隙图片;
将所述间隙图片与所述目标图片进行拼接,生成拼接图片;
调用appendAttributedString方法将转换为NSAttributedString类型的拼接图片拼接到所述第二对象中。
根据本发明的第二方面,提供一种图文混排装置,包括:
定义单元,用于定义一个对象类,在所述对象类中将目标图片的信息和目标文字定义为所述对象类的属性;
生成单元,用于对所述对象类进行实例化生成一个或多个第一对象,根据所述第一对象生成数组;
混排单元,用于创建一个工具类,在所述工具类中以类方法的方式定义一个接口方法,在所述接口方法中根据所述数组对所述目标图片和所述目标文字进行图文混排。
本发明提供一种图文混排方法及装置,该方法通过将需要进行图文混排的目标图片和目标文字的信息封装到一个对象类中,然后将包含一个或多个所述对象类的数组作为参数传入工具类中的接口方法中,在接口方法中实现图文混排,从而将图文混排方法封装到一个供外界调用的类方法中,方便对代码的集中管理;此外,开发人员只需要传入参数,直接使用所述工具类的名称调用所述接口方法,大大提高了开发效率;同时,所述接口方法可以重复使用,节省内存空间。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
在本发明的一个实施例中提供一种图文混排方法,图1为本发明实施例提供的图文混排方法整体流程示意图,该方法包括:S1,定义一个对象类,在所述对象类中将目标图片的信息和目标文字定义为所述对象类的属性;S2,对所述对象类进行实例化生成一个或多个第一对象,根据所述第一对象生成数组;S3,创建一个工具类,在所述工具类中以类方法的方式定义一个接口方法,在所述接口方法中根据所述数组对所述目标图片和所述目标文字进行图文混排。
具体地,S1中,所述对象类为自定义的继承于NSObject的类DYIconInfo。在所述对象类中,将目标图片的信息和目标文字定义为所述对象类的属性。所述目标图片为用于图文混排的图片,所述目标文字为用于图文混排的文字。然后在所述对象类中调用父类的初始化方法,在所述对象类的初始化方法中,对所述目标图片的信息进行初始化,如将所述目标图片的预设大小设置为0,将所述目标图片的内间距设置为0等。S2中,对所述对象类进行实例化生成一个或多个第一对象,根据所述第一对象生成数组iconInfoArray。iconInfoArray中存储的是一个或多个DYIconInfo类型的第一对象。通过将零散的所述目标图片的信息和所述目标文字封装到一个对象类中,便于使用和管理。后期图文混排中只要传入DYIconInfo类型的对象,即可实现目标图片和目标文字的自动图文混排。S3中,创建一个名为DYIconStringGenerater的工具类,所述工具类用于管理图文混排的处理过程。所述工具类提供一个供外界调用的接口方法,所述接口方法如下:
+(NSMutableAttributedString*)generateStringForIcons:(NSArray*)iconInfoArray;
所述接口方法以类方法的形式提供,外界只需直接使用所述工具类的名称调用所述接口方法即可,不需要额外创建对象,简化了调用流程。所述接口方法的参数为所述数组,通过数组的形式,一次可以传入多个所述第一对象,从而实现同时对多张所述目标图片进行图文混排。在所述接口方法中根据传入的数组对所述目标图片和所述目标文字进行图文混排。
本实施例通过将需要进行图文混排的目标图片和目标文字的信息封装到一个对象类中,然后将包含一个或多个所述对象类的数组作为参数传入工具类中的接口方法中,在接口方法中实现图文混排,从而将图文混排方法封装到一个供外界调用的类方法中,方便对代码的集中管理;此外,开发人员只需要传入参数,直接使用所述工具类的名称调用所述接口方法,一行代码即可实现图文混排,大大提高了开发效率;同时,所述接口方法可以重复使用,节省内存空间。
在上述实施例的基础上,本实施例中所述目标图片的信息包括所述目标图片的占位图片、预设大小、内间距、是否显示所述目标图片和所述目标图片中的一种或多种。
具体地,将所述所述目标图片的占位图片、预设大小、内间距、是否显示所述目标图片和所述目标图片中的一种或多种,以及所述目标文字定义为所述对象类DYIconInfo的属性。其中,将所述目标图片的占位图片定义为所述对象类的属性placeholder,类型为UIImage;将所述目标图片定义为所述对象类的属性image,类型为UIImage;将是否显示所述目标图片定义为所述对象类的属性shouldShow,类型为BOOL;将所述目标图片的预设大小定义为所述对象类的属性size,类型为CGSize;将所述目标图片的内间距定义为所述对象类的属性padding,类型为CGFloat;将所述目标文字定义为所述对象类的属性text,类型为NSString。
在上述实施例的基础上,本实施例中所述步骤S3具体包括:S31,在所述接口方法中调用alloc和init方法,创建一个NSMutableAttributedString类型的第二对象;S32,在所述第二对象中创建一个for循环,使用所述for循环遍历所述数组中的各第一对象;S33,对于每个所述第一对象,对该对象中的目标图片和目标文字进行图文混排。
具体地,在所述接口方法内部,调用alloc和init方法创建一个NSMutableAttributedString类型的第二对象mStr。在所述第二对象中创建一个for循环,循环的次数为数组iconInfoArray中所述第一对象的个数。使用所述for循环遍历所述数组中的各第一对象。对于每个所述第一对象,对该对象中的目标图片和目标文字进行图文混排。将实现图文混排的所述第二对象mStr返回。
在上述实施例的基础上,本实施例中所述步骤S33具体包括:S331,在所述接口方法中封装一个类方法,在所述类方法中调用图片缩放方法将每个所述第一对象中的目标图片的大小缩放为所述预设大小;S332,调用alloc和init方法,使用NSTextAttachment类创建一个第三对象,将缩放后的所述目标图片作为所述第三对象的image属性,将所述预设大小作为所述第三对象的bounds属性;S333,调用NSAttributedString类中的attributedStringWithAttachment方法,将所述第三对象转化为字符串类型,返回字符串类型的所述第三对象。
具体地,在所述接口方法中封装一个类方法,所述类方法为:
+(NSAttributedString*)stringFromImage:(UIImage*)image
withSize:(CGSize)size;
其中,image为所述目标图片,size为所述目标图片的预设大小,返回值为NSAttributedString类型。若size大于0,调用系统的图片缩放方法scalingProportionallyToSize:forImage:将所述目标图片image缩放为size大小的图片attImg。利用NSTextAttachment类,调用调用alloc和init方法,创建一个第三对象attachment。将attImg作为attachment的image属性,将attImg的预设大小作为attachment的bounds属性。利用NSAttributedString类调用系统的attributedStringWithAttachment方法,将被设置的attachment对象转化为NSAttributedString类型的对象返回。
在上述实施例的基础上,本实施例中所述步骤S333还包括:调用NSMutableAttributedString类中的内存分配函数,创建一个空的字符串;对所述空的字符串使用initWithString方法构建一个富文本,在所述富文本中设置所述目标文字的字体颜色和字体大小;其中,所述富文本的参数为字典,所述字典包括字体大小和字体颜色,所述字体大小通过systemFontOfSize函数获得,所述字体颜色通过UIColor类获得。
具体地,当需要对所述第三对象attachment设置特殊字体颜色和字体大小时,在将所述attachment对象返回之前执行添加特殊字体颜色和字体大小的操作。操作过程为使用NSMutableAttributedString类调用内存分配函数,创建一个空的字符串attriBututedString。对所述空的字符串使用initWithString方法构建一个有字体颜色属性且有字体大小属性富文本。构建时需要一个字典参数。所述字典中可以设置多种属性。向所述字典中添加一个key值NSFontAttributeName,对应的value值为字体大小,所述字体大小通过systemFontOfSize函数获得。向所述字典中添加key值为NSForegroundColorAttributeName,对应的value值为字体颜色,所述字体颜色通过UIColor类获得。将设置有特殊字体颜色和字体大小的所述第三对象返回。
在上述实施例的基础上,本实施例中所述步骤S33具体包括:若各所述第一对象中是否显示所述目标图片的值为是,则判断各所述第一对象中的目标图片是否存在;若所述第一对象中的目标图片存在,则调用appendAttributedString方法将转化为NSAttributedString类型的所述目标图片拼接到所述第二对象中;或者,若所述第一对象中的目标图片不存在,则判断所述第一对象中所述目标图片的占位图片是否存在;若所述目标图片的占位图片存在,则调用appendAttributedString方法将转换为NSAttributedString类型的所述占位图片拼接到所述第二对象中。
具体地,根据所述第一对象中的shouldShow属性,判断所述目标图片是否显示。若所述目标图片不显示,则停止后续处理。若所述目标图片显示,则判断所述数组中循环遍历的各第一对象中目标图片是否存在。若所述第一对象中的目标图片存在,则调用系统中的appendAttributedString方法将转化为NSAttributedString类型的所述目标图片拼接到所述第二对象中。若所述第一对象中的目标图片不存在,则判断所述第一对象中所述目标图片的占位图片是否存在;若所述目标图片的占位图片存在,则调用系统中的appendAttributedString方法将转化为NSAttributedString类型的所述目标图片的占位图片拼接到所述第二对象中。
在上述实施例的基础上,所述步骤S33具体包括:若所述目标图片的内间距存在,则将所述目标图片的内间距转化为间隙图片;将所述间隙图片与所述目标图片进行拼接,生成拼接图片;调用appendAttributedString方法将转换为NSAttributedString类型的拼接图片拼接到所述第二对象中。
具体地,若所述目标图片的内间距存在,则将所述目标图片的内间距转化为间隙图片,将所述间隙图片与所述目标图片进行拼接,返回拼接图片。将所述拼接图片的类型转化为字符串类型,调用系统中的appendAttributedString方法将转换为NSAttributedString类型的拼接图片拼接到所述第二对象mStr中。
在本发明的另一个实施例中提供一种图文混排装置,图2为本发明实施例提供的图文混排装置整体结构示意图,该装置包括定义单元1、生成单元2和混排单元3,其中:
所述定义单元1用于定义一个对象类,在所述对象类中将目标图片的信息和目标文字定义为所述对象类的属性;所述生成单元2用于对所述对象类进行实例化生成一个或多个第一对象,根据所述第一对象生成数组;所述混排单元3用于创建一个工具类,在所述工具类中以类方法的方式定义一个接口方法,在所述接口方法中根据所述数组对所述目标图片和所述目标文字进行图文混排。
具体地,所述对象类为自定义的继承于NSObject的类DYIconInfo。在所述对象类中,所述定义单元1将目标图片的信息和目标文字定义为所述对象类的属性。所述目标图片为用于图文混排的图片,所述目标文字为用于图文混排的文字。然后在所述对象类中调用父类的初始化方法,在所述对象类的初始化方法中,对所述目标图片的信息进行初始化,如将所述目标图片的预设大小设置为0,将所述目标图片的内间距设置为0等。所述生成单元2对所述对象类进行实例化生成一个或多个第一对象,根据所述第一对象生成数组iconInfoArray。iconInfoArray中存储的是一个或多个DYIconInfo类型的第一对象。通过将零散的所述目标图片的信息和所述目标文字封装到一个对象类中,便于使用和管理。后期图文混排中只要传入DYIconInfo类型的对象,即可实现目标图片和目标文字的自动图文混排。所述混排单元3创建一个名为DYIconStringGenerater的工具类,所述工具类用于管理图文混排的处理过程。所述工具类提供一个供外界调用的接口方法,所述接口方法如下:
+(NSMutableAttributedString*)generateStringForIcons:(NSArray*)iconInfoArray;
所述接口方法以类方法的形式提供,外界只需直接使用所述工具类的名称调用所述接口方法即可,不需要额外创建对象,简化了调用流程。所述接口方法的参数为所述数组,通过数组的形式,一次可以传入多个所述第一对象,从而实现同时对多张所述目标图片进行图文混排。在所述接口方法中根据传入的数组对所述目标图片和所述目标文字进行图文混排。
本实施例通过将需要进行图文混排的目标图片和目标文字的信息封装到一个对象类中,然后将包含一个或多个所述对象类的数组作为参数传入工具类中的接口方法中,在接口方法中实现图文混排,从而将图文混排方法封装到一个供外界调用的类方法中,方便对代码的集中管理;此外,开发人员只需要传入参数,直接使用所述工具类的名称调用所述接口方法,一行代码即可实现图文混排,可以重复使用,节省内存空间,同时大大提高了开发效率。
在上述实施例的基础上,本实施例中所述目标图片的信息包括所述目标图片的占位图片、预设大小、内间距、是否显示所述目标图片和所述目标图片中的一种或多种。
在上述实施例的基础上,本实施例中所述混排单元包括:创建子单元,用于在所述接口方法中调用alloc和init方法,创建一个NSMutableAttributedString类型的第二对象;遍历子单元,用于在所述第二对象中创建一个for循环,使用所述for循环遍历所述数组中的各第一对象;混排子单元,用于对于每个所述第一对象,对该对象中的目标图片和目标文字进行图文混排。
在上述实施例的基础上,本实施例中所述混排子单元具体包括:缩放子单元,用于在所述接口方法中封装一个类方法,在所述类方法中调用图片缩放方法将每个所述第一对象中的目标图片的大小缩放为所述预设大小;调用子单元,用于调用alloc和init方法,使用NSTextAttachment类创建一个第三对象,将缩放后的所述目标图片作为所述第三对象的image属性,将所述预设大小作为所述第三对象的bounds属性;转化子单元,用于调用NSAttributedString类中的attributedStringWithAttachment方法,将缩放后的所述目标图片转化为字符串类型,返回字符串类型的所述第三对象。
在上述实施例的基础上,本实施例中所述转化子单元还用于:调用NSMutableAttributedString类中的内存分配函数,创建一个空的字符串;对所述空的字符串使用initWithString方法构建一个富文本,在所述富文本中设置所述目标文字的字体颜色和字体大小;其中,所述富文本的参数为字典,所述字典包括字体大小和字体颜色,所述字体大小通过systemFontOfSize函数获得,所述字体颜色通过UIColor类获得。
在上述实施例的基础上,本实施例中所述混排子单元具体用于:若各所述第一对象中是否显示所述目标图片的值为是,则判断各所述第一对象中的目标图片是否存在;若所述第一对象中的目标图片存在,则调用appendAttributedString方法将转化为NSAttributedString类型的所述目标图片拼接到所述第二对象中;或者,若所述第一对象中的目标图片不存在,则判断所述第一对象中所述目标图片的占位图片是否存在;若所述目标图片的占位图片存在,则调用appendAttributedString方法将转换为NSAttributedString类型的所述占位图片拼接到所述第二对象中。
在上述实施例的基础上,本实施例中所述混排子单元具体用于:若所述目标图片的内间距存在,则将所述目标图片的内间距转化为间隙图片;将所述间隙图片与所述目标图片进行拼接,生成拼接图片;调用appendAttributedString方法将转换为NSAttributedString类型的拼接图片拼接到所述第二对象中。
本实施例提供一种图文混排设备,图3为本发明实施例提供的图文混排设备整体结构示意图,该设备包括:至少一个处理器31、至少一个存储器32和总线33;其中,
所述处理器31和存储器32通过所述总线33完成相互间的通信;
所述存储器32存储有可被所述处理器31执行的程序指令,所述处理器调用所述程序指令能够执行上述各方法实施例所提供的方法,例如包括:S1,定义一个对象类,在所述对象类中将目标图片的信息和目标文字定义为所述对象类的属性;S2,对所述对象类进行实例化生成一个或多个第一对象,根据所述第一对象生成数组;S3,创建一个工具类,在所述工具类中以类方法的方式定义一个接口方法,在所述接口方法中根据所述数组对所述目标图片和所述目标文字进行图文混排。
本实施例提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行上述各方法实施例所提供的方法,例如包括:S1,定义一个对象类,在所述对象类中将目标图片的信息和目标文字定义为所述对象类的属性;S2,对所述对象类进行实例化生成一个或多个第一对象,根据所述第一对象生成数组;S3,创建一个工具类,在所述工具类中以类方法的方式定义一个接口方法,在所述接口方法中根据所述数组对所述目标图片和所述目标文字进行图文混排。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所描述的图文混排设备实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后,本申请的方法仅为较佳的实施方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。