一种图片加载方法及装置与流程

文档序号:15019661发布日期:2018-07-25 00:24阅读:160来源:国知局

本发明属于应用开发领域,更具体地,涉及一种图片加载方法及装置。



背景技术:

随着手机移动端的快速发展,应用软件的种类日益丰富,产品和用户的交互性也越来越强。为了增强用户体验,丰富应用软件的营销方式,各种类型的广告图片在应用软件中的展现方式丰富多彩。

目前,有很多图片都是以链接的形式进行显示,当点击图片时,可以进入相应的页面。图片的样式会动态变化,例如不同节日时按钮中显示的图片不同。此外,所述图片的样式会随着鼠标的点击状态而变化,例如当鼠标放在图片上时显示高亮状态的图片,鼠标没有放在图片上时,显示普通状态的图片,鼠标点击所述图片时,显示选中状态的图片。此时,需要根据图片的点击状态加载不同图片。

现有技术中,当图片样式发生动态变化时需要手动下载图片,然后保存在缓存中,当需要对原图片进行更新时从缓存中加载所需图片,需要消耗大量时间。此外,对于每一幅可点击的图片都编写代码以实现图片的下载,需要编写大量代码,开发困难且可维护性差。



技术实现要素:

为克服上述按钮中动态图片的加载需要消耗大量时间,且开发困难,可维护性差的问题或者至少部分地解决上述问题,本发明提供了一种图片加载方法及装置。

根据本发明的第一方面,提供一种图片加载方法,包括:

S1,当获取到原图片的鼠标操作时,根据所述原图片的鼠标事件获取所述鼠标事件对应的目标图片状态;其中,所述鼠标事件与对应的目标图片状态预先关联存储;

S2,根据所述目标图片状态,获取所述目标图片状态对应的目标图片url;其中,所述目标图片状态与对应的目标图片url预先关联存储;

S3,根据所述目标图片状态和所述目标图片url,调用预先创建的UIButton的分类中的图片加载方法对所述目标图片进行加载。

具体地,所述图片加载方法包括第一方法、第二方法和第三方法中的一种或多种;

所述第一方法用于根据所述图片状态和所述目标图片url,对所述目标图片进行加载;

所述第二方法用于根据所述图片状态、所述目标图片url和预先设置的占位图片,对所述目标图片进行加载;

所述第三方法用于根据由所述目标图片url生成的图片加载请求、所述图片状态、所述占位图片,以及所述目标图片加载成功和失败时的处理入口,对所述目标图片进行加载。

具体地,所述步骤S2具体包括:

当所述图片加载方法包括所述第一方法、所述第二方法和所述第三方法中的多种时,调用所述第一方法、所述第二方法和所述第三方法中的一种对所述目标图片进行加载。

具体地,所述步骤S2具体包括:

当调用所述第一方法加载所述目标图片时,在所述第一方法内部调用所述第二方法,将所述第一方法中第二方法的参数所述占位图片传递为空值,在所述第一方法中的第二方法内部调用所述第三方法,将所述第二方法中第三方法的参数所述处理入口传递为空值;

当调用所述第二方法加载所述目标图片时,在所述第二方法内部调用所述第三方法,将所述第二方法中第三方法的参数所述处理入口传递为空值。

具体地,调用所述第一方法、所述第二方法和所述第三方法中的一种对所述目标图片进行加载的步骤具体包括:

在所述第三方法中判断所述目标图片是否正在下载;

若所述目标图片正在下载,则直接返回,等待所述目标图片下载完毕;或者,

若所述目标图片没有正在下载,则取消所述目标图片的历史下载操作,并判断下载管理器的缓存中是否存在所述目标图片。

具体地,判断下载管理器的缓存中是否存在所述目标图片的步骤具体包括:

若所述缓存中存在所述目标图片,则从所述缓存中加载所述目标图片;或者,

若所述缓存中不存在所述目标图片,则使用所述下载管理器下载所述目标图片。

具体地,使用所述下载管理器下载所述目标图片的步骤具体包括:

若所述目标图片下载成功,则加载所述目标图片,并将所述目标图片保存到所述缓存中;或者,

若所述目标图片下载失败,则使用所述占位图片替换所述原图片。

根据本发明的第二方面,提供一种图片加载装置,包括:

第一获取单元,用于当获取到原图片的鼠标操作时,根据所述原图片的鼠标事件获取所述鼠标事件对应的目标图片状态;其中,所述鼠标事件与对应的目标图片状态预先关联存储;

第二获取单元,用于根据所述目标图片状态,获取所述目标图片状态对应的目标图片url;其中,所述目标图片状态与对应的目标图片url预先关联存储;

加载单元,用于根据所述目标图片状态和所述目标图片url,调用预先创建的UIButton的分类中的图片加载方法对所述目标图片进行加载。

根据本发明的第三方面,提供一种图片加载设备,包括:

至少一个处理器、至少一个存储器和总线;其中,

所述处理器和存储器通过所述总线完成相互间的通信;

所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如前所述的方法。

根据本发明的第四方面,提供一种非暂态计算机可读存储介质,用于存储如前所述方法的计算机程序。

本发明提供一种图片加载方法及装置,该方法通过将复杂的图片加载过程封装到一个分类中,在需要加载目标图片时,只需要导入所述分类,根据原图片的鼠标事件对应的图片状态和图片状态对应的目标图片的url,调用所述分类提供的图片加载方法,从而实现目标图片的自动加载,使用简单,加载速度快,且提高了代码发复用率和开发效率。

附图说明

图1为本发明实施例提供的图片加载方法整体流程示意图;

图2为本发明实施例提供的图片加载装置整体结构示意图;

图3为本发明实施例提供的图片加载设备整体结构示意图。

具体实施方式

下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。

在本发明的一个实施例中提供一种图片加载方法,图1为本发明实施例提供的图片加载方法整体流程示意图,该方法包括:S1,当获取到原图片的鼠标操作时,根据所述原图片的鼠标事件获取所述鼠标事件对应的目标图片状态;其中,所述鼠标事件与对应的目标图片状态预先关联存储;S2,根据所述目标图片状态,获取所述目标图片状态对应的目标图片url;其中,所述目标图片状态与对应的目标图片url预先关联存储;S3,根据所述目标图片状态和所述目标图片url,调用预先创建的UIButton的分类中的图片加载方法对所述目标图片进行加载。

具体地,S1中,所述原图片存在链接,可以点击。所述原图片的鼠标事件包括单击鼠标、双击鼠标、鼠标移入到所述原图片上方和鼠标移出所述原图片上方中的一种或多种。所述图片状态为枚举类型,包括高亮状态、选中状态、禁用状态和普通状态,但本实施例不限于这四种图片状态。将原图片的原始显示作为普通状态,所述高亮状态为相对于普通状态的高亮显示。所述选中状态为原图片被点击时的显示,所述禁用状态为标识原图片无法被点击的显示。每个所述鼠标事件存在与其对应的图片状态,如鼠标移入到所述原图片上方对应的图片状态为高亮状态或禁用状态,单击鼠标对应的图片状态为选中状态,鼠标移出所述原图片上方对应的图片状态为普通状态。S2中,由于所述目标图片是动态变化的,需要从服务器加载,不同的目标图片对应不同的url。根据所述原图片的鼠标事件,获取所述鼠标事件对应的图片状态。根据所述图片状态,获取所述图片状态对应的目标图片的url。

S3中,预先创建一个UIButton的分类,UIButton是IOS中常用的控件。可以为所述分类命名为UIButton+image。在所述分类中定义图片加载方法,所述图片加载方法用于图片的加载。将所述图片状态和所述目标图片url作为参数传递给所述图片加载方法,以供所述图片加载方法根据所述图片状态和所述目标图片url对动态可点击的所述目标图片进行加载。

本发明通过将复杂的图片加载过程封装到一个分类中,在需要加载目标图片时,只需要导入所述分类,根据原图片的鼠标事件对应的图片状态和图片状态对应的目标图片的url,调用所述分类提供的图片加载方法,从而实现目标图片的自动加载,使用简单,加载速度快,且提高了代码发复用率和开发效率。

在上述实施例的基础上,本实施例中所述图片加载方法包括第一方法、第二方法和第三方法中的一种或多种;所述第一方法用于根据所述图片状态和所述目标图片url,对所述目标图片进行加载;所述第二方法用于根据所述图片状态、所述目标图片url和预先设置的占位图片,对所述目标图片进行加载;所述第三方法用于根据由所述目标图片url生成的图片加载请求、所述图片状态、所述占位图片,以及所述目标图片加载成功和失败时的处理入口,对所述目标图片进行加载。

具体地,分类中的图片加载方法可以为第一方法、第二方法和第三方法中的一种或多种。将所述图片状态和所述目标图片url传入所述第一方法,以供所述第一方法根据所述图片状态和所述目标图片url对所述目标图片进行加载。所述第一方法提供的接口函数为:

setImageForState:(UIControlState)state

withURL:(NSURL*)url

其中,state为所述图片状态,为枚举类型,为普通状态stateNormal、高亮状态stateHighlighted、禁用状态stateDisabled和选中状态stateSelected中的一种,但本实施例不限于这四种图片状态。url为所述目标图片加载时的url。所述第一方法使用简单,只需要传入state参数和url参数就可以完成目标图片的加载,适用于目标图片较小且下载速度较快的情况。

将所述图片状态、所述目标图片url和预先设置的占位图片传入所述第二方法,以供所述第二方法根据所述图片状态、所述目标图片url和预先设置的占位图片,对所述目标图片进行加载。所述第二方法提供带占位图片的接口函数为:

(void)setImageForState:(UIControlState)state

withURL:(NSURL*)url

placeholderImage:(UIImage*)placeholderImage

除了所述第一方法中的两个参数以外,添加了占位图片placeholderImage参数,用于设置占位图片。所述第二方法在所述目标图片加载前设置占位图片。在所述目标图片较大且下载速度较慢的情况下,设置占位图片可以提升用户体验。

根据所述目标图片url生成图片加载请求,将图片加载请求、所述图片状态、所述占位图片,以及所述目标图片加载成功和失败时的处理入口作为参数传入所述第三方法,以供所述第三方法根据所述图片加载请求、所述图片状态、所述占位图片和所述处理入口对所述目标图片进行加载。所述第三方法可以使用所述处理入口在图片加载成功或失败时调用所述处理入口进行额外处理。所述第三方法的接口函数为:

(void)ImageForState:(UIControlState)state

withURLRequest:(NSURLRequest*)urlRequest

placeImage:(UIImage*)placeholderImage

success:(void(^)(NSURLRequest*request,UIImage*image))success

failure:(void(^)(NSError*error))failure

其中,urlRequest参数为图片加载请求。相比于所述第二方法,所述第三方法的接口函数中多了两个参数,分别为图片加载成功时的回调参数success和图片加载失败时的回调参数failure。这两个参数的添加,使得对所述目标图片加载结果添加了额外的处理入口,比如失败时提示用户图片加载失败,从而提高用户体验。

在上述实施例的基础上,所述步骤S2具体包括:当所述图片加载方法包括所述第一方法、所述第二方法和所述第三方法中的多种时,调用所述第一方法、所述第二方法和所述第三方法中的一种对所述目标图片进行加载。

具体地,当所述图片加载方法同时包括所述第一方法、第二方法和第三方法时,根据场景需要调用所述分类中的三种方法中的一种对所述目标图片进行加载,从而满足不同场景下目标图片的加载。

在上述各实施例的基础上,本实施例中所述步骤S2具体包括:当调用所述第一方法加载所述目标图片时,在所述第一方法内部调用所述第二方法,将所述第一方法中第二方法的参数所述占位图片传递为空值,,在所述第一方法中的第二方法内部调用所述第三方法,将所述第二方法中第三方法的参数所述处理入口传递为空值;当调用所述第二方法加载所述目标图片时,,在所述第二方法内部调用所述第三方法,将所述第二方法中第三方法的参数所述处理入口传递为空值。

具体地,在所述第一方法内部直接调用所述第二方法,将所述第一方法中第二方法的参数所述占位图片传递为空值,从而满足所述第一方法的实现。在所述第二方法内部直接调用所述第三方法,将所述第二方法中第三方法的参数所述处理入口传递为空值。从而满足所述第二方法的实现。所述第一方法、所述第二方法和所述第三方法之间相互关联,互相调用,从而只用在所述第三方法中实现具体的目标图片加载。在所述第一方法内部只用调用所述第二方法,所述第一方法中的第二方法内部只用调用第三方法。当调用所述第二方法进行目标图片加载时,在所述第二方法内部只用调用所述第三方法,从而实现了代码的简化。调用所述第一方法、所述第二方法或所述第三方法对所述目标图片进行加载。

在上述实施例的基础上,本实施例中调用所述第一方法、所述第二方法和所述第三方法中的一种对所述目标图片进行加载的步骤具体包括:在所述第三方法中判断所述目标图片是否正在下载;若所述目标图片正在下载,则直接返回,等待所述目标图片下载完毕;或者,若所述目标图片没有正在下载,则取消所述目标图片的历史下载操作,并判断下载管理器的缓存中是否存在所述目标图片。

具体地,由于在所述第一方法内部调用第二方法,在所述第一方法中的第二方法和单独的第二方法中调用所述第三方法,因此只需要在所述第三方法中实现具体的所述目标图片的加载。在所述第三方法中根据所述目标图片的url,使用isActiveTaskURLEqualToURLRequest方法判断所述目标图片是否正在下载。如果正在下载,则直接返回,即return,等待所述目标图片下载完毕。如果没有正在下载,则使用cancelImageDownloadTaskForState方法取消所述目标图片的历史下载操作,并创建一个下载管理器downloader,使用所述下载管理器的imageCache属性获取所述下载管理器的缓存中的图片,判断所述下载管理器的缓存中是否存在所述目标图片。判断所述缓存中的图片cachedImage中是否存在所述目标图片。

在上述实施例的基础上,本实施例中判断下载管理器的缓存中是否存在所述目标图片的步骤具体包括:若所述缓存中存在所述目标图片,则从所述缓存中加载所述目标图片;或者,若所述缓存中不存在所述目标图片,则使用所述下载管理器下载所述目标图片。

具体地,如果缓存中存在所述目标图片,则直接从所述缓存中加载所述目标图片,否则使用所述下载管理器下载所述目标图片。使用所述下载管理器调用下载函数downloadImageForURLRequest对所述目标图片进行下载,将所述目标图片url和一个回调参数传入所述下载函数。所述回调包括在所述目标图片加载成功后将所述目标图片保存到所述缓存中,再调用图片加载函数setImageForState显示所述目标图片。

在上述实施例的基础上,本实施例中使用所述下载管理器下载所述目标图片的步骤具体包括:若所述目标图片下载成功,则加载所述目标图片,并将所述目标图片保存到所述缓存中;或者,若所述目标图片下载失败,则使用所述占位图片替换所述原图片。

具体地,如果所述目标图片下载成功,则加载所述目标图片,并将所述目标图片保存到所述下载管理器的缓存中。如果所述目标图片下载失败,则取消当前下载,并打印错误消息。同时获取占位图片placeImage。具体地,首先判断所述占位图片是否存在,若存在,则使用设置占位图片的方法setImage将所述占位图片显示到所述原图片的位置。此时使用所述下载管理器重新下载所述目标图片,下载成功后加载所述目标图片。

本实施例使用下载管理器对所述目标图片进行下载,并提供缓存机制,即保证所述目标图片的时效性,又节省流量,提升用户体验。

在本发明的另一个实施例中提供一种图片加载装置,图2为本发明实施例提供的图片加载装置整体结构示意图,该装置包括第一获取单元1、第二获取单元2和加载单元3,其中:

所述第一获取单元1用于当获取到原图片的鼠标操作时,根据所述原图片的鼠标事件获取所述鼠标事件对应的目标图片状态;其中,所述鼠标事件与对应的目标图片状态预先关联存储;所述第二获取单元2用于根据所述目标图片状态,获取所述目标图片状态对应的目标图片url;其中,所述目标图片状态与对应的目标图片url预先关联存储;所述加载单元3用于根据所述目标图片状态和所述目标图片url,调用预先创建的UIButton的分类中的图片加载方法对所述目标图片进行加载。

具体地,所述原图片存在链接,可以点击。所述原图片的鼠标事件包括单击鼠标、双击鼠标、鼠标移入到所述原图片上方和鼠标移出所述原图片上方中的一种或多种。所述图片状态为枚举类型,包括高亮状态、选中状态、禁用状态和普通状态,但本实施例不限于这四种图片状态。将原图片的原始显示作为普通状态,所述高亮状态为相对于普通状态的高亮显示。所述选中状态为原图片被点击时的显示,所述禁用状态为标识原图片无法被点击的显示。每个所述鼠标事件存在与其对应的图片状态,如鼠标移入到所述原图片上方对应的图片状态为高亮状态或禁用状态,单击鼠标对应的图片状态为选中状态,鼠标移出所述原图片上方对应的图片状态为普通状态。所述第一获取单元1根据所述原图片的鼠标事件,获取所述鼠标事件对应的图片状态。每个图片状态对应有一张目标图片。由于所述目标图片是动态变化的,需要从服务器加载,不同的目标图片对应不同的url。所述第二获取单元2根据所述图片状态,获取所述图片状态对应的目标图片的url。

预先创建一个UIButton的分类,UIButton是IOS中常用的控件。可以为所述分类命名为UIButton+image。在所述分类中定义图片加载方法,所述图片加载方法用于图片的加载。将所述图片状态和所述目标图片url作为参数传递给所述图片加载方法,以供所述图片加载方法根据所述图片状态和所述目标图片url对动态可点击的所述目标图片进行加载。所述加载单元3调用预先创建的UIButton的分类中的图片加载方法对所述目标图片进行加载,将加载的所述目标图像显示到所述原图片的位置,以替换所述原图片。

本发明通过将复杂的图片加载过程封装到一个分类中,在需要加载目标图片时,只需要导入所述分类,根据原图片的鼠标事件对应的图片状态和图片状态对应的目标图片的url,调用所述分类提供的图片加载方法,从而实现目标图片的自动加载,使用简单,加载速度快,且提高了代码发复用率和开发效率。

在上述实施例的基础上,本实施例中所述图片加载方法包括第一方法、第二方法和第三方法中的一种或多种;所述第一方法用于根据所述图片状态和所述目标图片url,对所述目标图片进行加载;所述第二方法用于根据所述图片状态、所述目标图片url和预先设置的占位图片,对所述目标图片进行加载;所述第三方法用于根据由所述目标图片url生成的图片加载请求、所述图片状态、所述占位图片,以及所述目标图片加载成功和失败时的处理入口,对所述目标图片进行加载。

在上述实施例的基础上,本实施例中所述加载单元具体用于:当所述图片加载方法包括所述第一方法、所述第二方法和所述第三方法中的多种时,调用所述第一方法、所述第二方法和所述第三方法中的一种对所述目标图片进行加载。

在上述各实施例的基础上,本实施例中所述加载单元具体用于:当调用所述第一方法加载所述目标图片时,在所述第一方法内部调用所述第二方法,将所述第一方法中第二方法的参数所述占位图片传递为空值,在所述第一方法中的第二方法内部调用所述第三方法,将所述第二方法中第三方法的参数所述处理入口传递为空值;当调用所述第二方法加载所述目标图片时,在所述第二方法内部调用所述第三方法,将所述第二方法中第三方法的参数所述处理入口传递为空值。

在上述实施例的基础上,本实施例中所述加载单元进一步具体用于:在所述第三方法中判断所述目标图片是否正在下载;若所述目标图片正在下载,则直接返回,等待所述目标图片下载完毕;或者,若所述目标图片没有正在下载,则取消所述目标图片的历史下载操作,并判断下载管理器的缓存中是否存在所述目标图片。

在上述实施例的基础上,本实施例中所述加载单元进一步具体用于:若所述目标图片下载成功,则加载所述目标图片,并将所述目标图片保存到所述缓存中;或者,若所述目标图片下载失败,则使用所述占位图片替换所述原图片。

本实施例提供一种图片加载设备,图3为本发明实施例提供的图片加载设备整体结构示意图,该设备包括:至少一个处理器31、至少一个存储器32和总线33;其中,

所述处理器31和存储器32通过所述总线33完成相互间的通信;

所述存储器32存储有可被所述处理器31执行的程序指令,所述处理器调用所述程序指令能够执行上述各方法实施例所提供的方法,例如包括:S1,当获取到原图片的鼠标操作时,根据所述原图片的鼠标事件获取所述鼠标事件对应的目标图片状态;其中,所述鼠标事件与对应的目标图片状态预先关联存储;S2,根据所述目标图片状态,获取所述目标图片状态对应的目标图片url;其中,所述目标图片状态与对应的目标图片url预先关联存储;S3,根据所述目标图片状态和所述目标图片url,调用预先创建的UIButton的分类中的图片加载方法对所述目标图片进行加载。

本实施例提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行上述各方法实施例所提供的方法,例如包括:S1,当获取到原图片的鼠标操作时,根据所述原图片的鼠标事件获取所述鼠标事件对应的目标图片状态;其中,所述鼠标事件与对应的目标图片状态预先关联存储;S2,根据所述目标图片状态,获取所述目标图片状态对应的目标图片url;其中,所述目标图片状态与对应的目标图片url预先关联存储;S3,根据所述目标图片状态和所述目标图片url,调用预先创建的UIButton的分类中的图片加载方法对所述目标图片进行加载。

本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。

以上所描述的图片加载设备实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

最后,本申请的方法仅为较佳的实施方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1