公开/公告号CN107038219A
专利类型发明专利
公开/公告日2017-08-11
原文格式PDF
申请/专利权人 武汉斗鱼网络科技有限公司;
申请/专利号CN201710162010.9
申请日2017-03-17
分类号G06F17/30(20060101);G06F3/0484(20130101);
代理机构42225 武汉智权专利代理事务所(特殊普通合伙);
代理人沈林华
地址 430000 湖北省武汉市东湖开发区软件园东路1号软件产业4.1期B1栋11楼
入库时间 2023-06-19 02:59:30
法律状态公告日
法律状态信息
法律状态
2019-03-15
授权
授权
2017-09-05
实质审查的生效 IPC(主分类):G06F17/30 申请日:20170317
实质审查的生效
2017-08-11
公开
公开
技术领域
本发明涉及互联网移动端应用开发领域,具体是涉及一种iOS中加载GIF动画的方法及装置。
背景技术
在互联网移动端的应用中,很多地方需要播放GIF(Graphics Interchange Format,图像互换格式)动画,iOS(苹果移动设备操作系统)开发中提供了一些加载GIF动画的方法,也有一些开源的框架提供了加载GIF动画的方法。
目前的主流方案中,GIF动画的加载播放方案一般是SDWebImage方案,即UIImageView直接加载GIF动画,这个方案最大的缺点是:加载的GIF动画超过200kb的时候,iOS进行动画渲染要占用200M以上的内存,容易引起内存暴增,导致系统崩溃。
发明内容
本发明的目的是为了克服上述背景技术的不足,提供一种iOS中加载GIF动画的方法及装置,对加载的动画没有缓存,用完就释放内存,加载GIF动画时,不会引起内存暴增,避免系统崩溃。
本发明提供一种iOS中加载GIF动画的方法,包括以下步骤:
A1、使用懒加载的方式,创建一个网页界面;在内存中创建一个手势,为创建的手势添加消息回调的对象;设置网页界面的显示大小和显示位置;
A2、将网页界面添加到当前的控制器;获取申请加载GIF动画的网络请求,读取存储在网络的GIF动画的统一资源定位符URL,通过URL加载GIF动画。
在上述技术方案的基础上,步骤A2之后还包括以下步骤:
B1、点击网页界面,触发手势操作,截取图像;创建一个和网页界面相同大小的图像对象,将截取的图像赋值给创建的图像对象;
B2、将图像对象显示出来,显示的内容是截取的网页界面区域的内容,同时隐藏播放动画的网页界面。
在上述技术方案的基础上,步骤B1中所述截取图像的流程如下:
a、使用苹果自带的.size函数获取截图的大小;使用苹果的系统函数,获取当前界面的图像上下文;
b、截取网页界面的图层的图像;获得截取的图像;结束图像上下文。
本发明还提供一种iOS中加载GIF动画的装置,该装置包括创建单元、加载单元,其中:
创建单元用于:使用懒加载的方式,创建一个网页界面;在内存中创建一个手势,为创建的手势添加消息回调的对象;设置网页界面的显示大小和显示位置;
加载单元用于:将网页界面添加到当前的控制器;获取申请加载GIF动画的网络请求,读取存储在网络的GIF动画的统一资源定位符URL,通过URL加载GIF动画。
在上述技术方案的基础上,该装置还包括截取单元、显示单元、隐藏单元,其中:
截取单元用于:点击网页界面,触发手势操作,截取图像;创建一个和网页界面相同大小的图像对象,将截取的图像赋值给创建的图像对象;
显示单元用于:将图像对象显示出来,显示的内容是截取的网页界面区域的内容;
隐藏单元用于:隐藏播放动画的网页界面。
在上述技术方案的基础上,所述截取单元包括获取子单元、截取子单元,其中:
获取子单元用于:使用苹果自带的.size函数获取截图的大小;使用苹果的系统函数,获取当前界面的图像上下文;
截取子单元用于:截取网页界面的图层的图像;获得截取的图像;结束图像上下文。
与现有技术相比,本发明的优点如下:
(1)本发明采用UIWebView方案取代传统的SDWebImage方案,UIWebView方案为:使用懒加载的方式,创建一个网页界面;在内存中创建一个手势,为创建的手势添加消息回调的对象;设置网页界面的显示大小和显示位置;将网页界面添加到当前的控制器;获取申请加载GIF动画的网络请求,读取存储在网络的GIF动画的统一资源定位符URL,通过URL加载GIF动画。UIWebView方案对加载的动画没有缓存,用完就释放内存,加载GIF动画时,不会引起内存暴增,避免系统崩溃。
(2)某些项目中有一些需求需要停止GIF动画的播放,下一次又可以继续播放GIF动画,目前为止还没有提供可以停止GIF播放的解决方案。为了解决GIF动画无法实现暂停播放的问题,本发明点击网页界面,触发手势操作,截取图像;创建一个和网页界面相同大小的图像对象,将截取的图像赋值给创建的图像对象;将图像对象显示出来,显示的内容是截取的网页界面区域的内容,同时隐藏播放动画的网页界面。本发明通过先获得截图,再将截图的内容显示出来,隐藏播放动画的网页界面UIWebView,将一个GIF动画变成了一个静态的图像,达到GIF动画暂停播放的视觉效果。
附图说明
图1是本发明实施例中iOS中加载GIF动画的方法的流程图。
图2是本发明实施例中暂停播放GIF动画的流程图。
图3是本发明实施例中截取图像的流程图。
具体实施方式
下面结合附图及具体实施例对本发明作进一步的详细描述。
参见图1所示,本发明实施例提供一种iOS中加载GIF动画的方法,包括以下步骤:
A1、使用懒加载的方式,创建一个网页界面;在内存中创建一个手势,为创建的手势添加消息回调的对象;设置网页界面的显示大小和显示位置;
A2、将网页界面添加到当前的控制器;获取申请加载GIF动画的网络请求,读取存储在网络的GIF动画的统一资源定位符URL,通过URL加载GIF动画。
参见图2所示,步骤A2之后还可以包括以下步骤:
B1、点击网页界面,触发手势操作,截取图像;创建一个和网页界面相同大小的图像对象,将截取的图像赋值给创建的图像对象;
B2、将图像对象显示出来,显示的内容是截取的网页界面区域的内容,同时隐藏播放动画的网页界面。
参见图3所示,步骤B1中所述截取图像的流程如下:
a、使用苹果自带的.size函数获取截图的大小;使用苹果的系统函数,获取当前界面的图像上下文;
b、截取网页界面的图层的图像;获得截取的图像;结束图像上下文。
本发明实施例还提供一种iOS中加载GIF动画的装置,该装置包括创建单元、加载单元,其中:
创建单元用于:使用懒加载的方式,创建一个网页界面;在内存中创建一个手势,为创建的手势添加消息回调的对象;设置网页界面的显示大小和显示位置;
加载单元用于:将网页界面添加到当前的控制器;获取申请加载GIF动画的网络请求,读取存储在网络的GIF动画的统一资源定位符URL,通过URL加载GIF动画。
该装置还可以包括截取单元、显示单元、隐藏单元,其中:
截取单元用于:点击网页界面,触发手势操作,截取图像;创建一个和网页界面相同大小的图像对象,将截取的图像赋值给创建的图像对象;
显示单元用于:将图像对象显示出来,显示的内容是截取的网页界面区域的内容;
隐藏单元用于:隐藏播放动画的网页界面。
截取单元包括获取子单元、截取子单元,其中:
获取子单元用于:使用苹果自带的.size函数获取截图的大小;使用苹果的系统函数,获取当前界面的图像上下文;
截取子单元用于:截取网页界面的图层的图像;获得截取的图像;结束图像上下文。
下面结合具体程序代码进行详细说明。
实施例1、
加载GIF动画的过程如下:
S101、使用懒加载的方式,创建一个网页界面UIWebView,该网页界面的名称是webView;
S102、使用函数[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(webViewTap:)],该函数右边[UITapGestureRecognizer alloc]执行的是:在内存中创建一个手势,initWithTarget函数执行的是:为创建的手势添加消息回调的对象,这个语句中的self代表添加的回调在哪个控制器执行,@selector(webViewTap:)是函数webViewTap方法选择器,也就是执行一个回调函数的过程,上述函数执行完毕会有一个对象UITapGestureRecognizer*gesture,这个对象的类型是UITapGestureRecognizer*,即一个手势对象上述过程完成了为网页界面webView添加手势,同时使用函数语句[webView addGestureRecognizer:gesture],将手势添加到网页界面webView上,其中addGestureRecognizer是添加手势的函数,gesture是上述函数执行完毕返回的对象;
S103、设置网页界面webView的显示大小和显示位置;
S104、使用函数语句[self.view addSubview:_webView],将网页界面webView添加到当前的控制器,其中addSubview函数是代表添加控件的函数,self.view是指当前控制器的view,该函数的意思是将网页界面webView添加到当前控制器的view上;
S105、[NSURLRequest requestWithURL:url]语句requestWithURL是一个获取一个请求的函数,这个请求函数返回是一个申请加载GIF动画的网络请求request,request是一个请求对象,包含一个申请加载GIF动画的网络请求的URL(Uniform Resource Locator,统一资源定位符)等信息,还有和其他的网络请求有关的信息,[self.webView loadRequest:request];使用函数loadRequest去读取网络请求request,即去读取存储在网络的GIF动画的URL,GIF动画存储在网络上,会给客户端一个URL,APP(APPlication,应用)通过URL加载GIF动画。
实施例2、
在实施例1的基础上,暂停播放GIF动画的过程如下:
S201、点击网页界面webView,触发手势操作,截取图像;
调用-(void)webViewTap:(UITapGestureRecognizer*)recognizer函数,该函数没有返回值,返回值是void,该函数有一个参数recognizer,这个参数的类型是UITapGestureRecognizer,recognizer代表一个手势,这个手势中包含有和手势相关的信息,这个函数调用stopPalyGIF函数,stopPalyGIF函数的编写过程是:
S201a、使用苹果自带的.size函数CGSize webSize=self.webView.size,获取截图的大小,这个截图的大小是webSize,其中,self.webView是指去加载GIF动画的网页界面webView,.size语法是一个点语法,它的函数意义是获取这个网页界面webView的size,size即宽和高;
S201b、使用苹果的系统函数,获取当前界面的图像上下文;
UIGraphicsBeginImageContext(webSize)函数需要步骤S201a获得的截图大小webSize,UIGraphicsBeginImageContext函数的作用是获取websize指定区域大小的上下文对象;
S201c、截取网页界面webView的图层的图像,[self.webView.layer renderInContext:UIGraphicsGetCurrentContext(),其中,UIGraphicsGetCurrentContext()是步骤S201b中的上下文对象,上下文是苹果客户端绘制图层相关的,self.webView.layer指获取当前网页界面webView的图层,renderInContext的含义是:将上下文对象绘制到图层上,本处的含义是将获得的上下文对象渲染在网页界面webView的图层上;
S201d、获得截取的图像,使用函数UIImage*image=UIGraphicsGetImageFromCurrentImageContext(),其中,image是一个变量,用于存储图像,UIGraphicsGetImageFromCurrentImageContext()函数是根据图像的上下文获得一个图像;
S201e、结束图像上下文,调用UIGraphicsEndImageContext()函数,此处之所以结束上下文,是因为结束上下文可以释放一些内存;
S202、创建一个和网页界面UIWebView相同大小的图像对象:UIImageView类型的图像对象imageContent,将步骤S201中截取的图像赋值给创建的图像对象imageContent;
S203、将图像对象imageContent显示出来,显示的内容是截取的网页界面UIWebView区域的内容,同时隐藏播放动画的网页界面webView。
本发明实施例解决了两个目前iOS开发中存在的2个问题:
(1)目前主流的GIF动画加载使用SDWebImage方案,缺点是超过200kb的GIF动画加载,使用暴力测试,会导致app崩溃;本发明实施例使用UIWebView方案加载GIF动画,由于没有使用缓存,内存能够得到及时的释放,不存在内存暴涨的问题。
(2)为了解决GIF动画无法实现暂停播放的问题,本发明实施例使用截屏技术,加载截屏的图片并显示,让播放动画的网页界面UIWebView隐藏起来,将一个GIF动画变成了一个静态的图像,达到GIF动画暂停播放的视觉效果。
本领域的技术人员可以对本发明实施例进行各种修改和变型,倘若这些修改和变型在本发明权利要求及其等同技术的范围之内,则这些修改和变型也在本发明的保护范围之内。
说明书中未详细描述的内容为本领域技术人员公知的现有技术。
机译: 个人计算机软件完整性启动和测试-在ROM-BIOS中进行开机自检,加载分区,加载操作系统分区的启动扇区,启动操作系统和内核,以及使用单向哈希函数进行加密密钥和测试
机译: 通过在系统BIOS中制作接口BIOS的备份副本并在发生错误时在系统BIOS中执行备份接口BIOS来备份接口BIOS的方法
机译: 在相同的条件下,在异构醇反应催化的醇硅醇中,在醇Primarios或sec.Darios中,在平衡处理的条件下增加重排alilico的方法;醇催化伯醇或segundario中液相催化的醇硅醇的异构化反应的方法;从不同程度的claOol醇制备醇度的方法,以及从alilico挥发性较低的醇度制备荷兰醇度更高的醇醇盐的方法