首页> 中国专利> iOS中加载GIF动画的方法及装置

iOS中加载GIF动画的方法及装置

摘要

本发明公开了一种iOS中加载GIF动画的方法及装置,涉及互联网移动端应用开发领域。该方法包括以下步骤:使用懒加载的方式,创建一个网页界面;在内存中创建一个手势,为创建的手势添加消息回调的对象;设置网页界面的显示大小和显示位置;将网页界面添加到当前的控制器;获取申请加载GIF动画的网络请求,读取存储在网络的GIF动画的统一资源定位符URL,通过URL加载GIF动画。本发明对加载的动画没有缓存,用完就释放内存,加载GIF动画时,不会引起内存暴增,避免系统崩溃。

著录项

  • 公开/公告号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动画暂停播放的视觉效果。

本领域的技术人员可以对本发明实施例进行各种修改和变型,倘若这些修改和变型在本发明权利要求及其等同技术的范围之内,则这些修改和变型也在本发明的保护范围之内。

说明书中未详细描述的内容为本领域技术人员公知的现有技术。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号