ios 下拉刷新酷炫动画动画效果是用gif的吗

仿朋友圈下拉刷新动画(基础动画) - 简书
仿朋友圈下拉刷新动画(基础动画)
demo地址:
动画的起源源于好奇
因为刚开是学动画,恨不得把所有的都实现一遍,试了一下微信朋友圈的下拉刷新动画。
如果ViewController的第一个子视图为UIScrollview的子类,系统会默认有个偏移量 ,如果不想这样可以设置
self.automaticallyAdjustsScrollViewInsets = NO;
下面所有的Navbar 都是默认透明的,设置为不透明就需要处理下。
首先我们需要自定义一个headerView,但是不要设置self.layer.masksToBounds = Yes ,这样超出的部分都会被剪掉。
header 的组成部分:
UIImageView *_backgroundImageV
UIImageView *_iconV
UILabel *_nameL
因为要做成微信朋友圈的效果我们需要这样处理
//背景图 y 设置为 负的。
_backgroundImageView.frame = CGRectMake(0, -60, KWidth, CGRectGetHeight(self.frame)+60);
_iconView.frame = CGRectMake(KWidth - 70 -15, CGRectGetHeight(self.frame)-40, 70, 70);
_nameLabel.frame = CGRectMake(KWidth - 70 -15 -20-200, CGRectGetHeight(self.frame)-20-10, 200, 20);
接下来处理下拉刷新的部分
tableview是Viewcontroller的第一个子视图,所以默认的Contentoffset.y为-64,我们需要的就是在下拉刷新的时候给headerview添加动画。
可以将监听contentoffset抽取出来,减少Viewcontroller的冗杂。
自定义一个view,给其一些属性:
#import &UIKit/UIKit.h&
typedef enum {
LXWXRefreshViewStateNormal,
LXWXRefreshViewStateWillRefresh,
LXWXRefreshViewStateRefreshing,
} LXWXRefreshViewS
@interface LX_RefreshView : UIView &CAAnimationDelegate&
+ (instancetype)refreshHeaderWithCenter:(CGPoint)
//传入我们需要的处理下拉刷新的UIscrollview的子类
@property(nonatomic,strong)UIScrollView *scrollV
//刷新ing的回调,用来处理数据
@property (nonatomic, copy) void(^refreshingBlock)();
@property (nonatomic, assign) LXWXRefreshViewState refreshS
//结束刷新,回到主线程刷新tableview
- (void)endR
.m文件中的处理
- (void)setupView
self.backgroundColor = [UIColor clearColor];
//动态添加到 headerview上,做动画处理
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"AlbumReflashIcon"]];
self.bounds = imageView.
[self addSubview:imageView];
//刷新时请求数据等待动画
_rotateAnimation = [[CABasicAnimation alloc] init];
_rotateAnimation.keyPath = @"transform.rotation.z";
_rotateAnimation.fromValue = @0;
_rotateAnimation.toValue = @(M_PI * 2);
_rotateAnimation.duration = 1.0;
_rotateAnimation.repeatCount = MAXFLOAT;
将viewcontroller中监听contentoffset属性迁移到这里,在设置属性的时候开始监听
- (void)setScrollView:(UIScrollView *)scrollView
_scrollView = scrollV
[scrollView addObserver:self forKeyPath:ObserveKeyPath options:NSKeyValueObservingOptionNew context:nil];
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary&NSString *,id& *)change context:(void *)context
if (keyPath != ObserveKeyPath)
[self updateRefreshHeaderWithOffsetY:self.scrollView.contentOffset.y];
在更新contentoffset.y 的时候做一些判断,处理旋转角度,可以自己调整。在拖拽以及停止拖拽的时候判断刷新状态,进而进行不同的动画处理。
- (void)updateRefreshHeaderWithOffsetY:(CGFloat)y
CGFloat rotateValue = y / 47.0 * M_PI;
if (y & contentOffetY) {
y = contentOffetY;
if (self.scrollView.isDragging && self.refreshState != LXWXRefreshViewStateWillRefresh) {
self.refreshState = LXWXRefreshViewStateWillR
} else if (!self.scrollView.isDragging && self.refreshState == LXWXRefreshViewStateWillRefresh) {
self.refreshState = LXWXRefreshViewStateR
if (self.refreshState == LXWXRefreshViewStateRefreshing)
CGAffineTransform transform = CGAffineTransformI
//这里处理纵向偏移是因为 tableview为第一个子视图,我们需要设向下偏移,所以取负值。否则是看不到这个视图的。
transform = CGAffineTransformTranslate(transform, 0, -y);
transform = CGAffineTransformRotate(transform, rotateValue);
self.transform =
对不同刷新状态的处理 在刷新完成时我们需要再做一个动画,使其纵向消失,然后在动画完成后移除。
- (void)setRefreshState:(LXWXRefreshViewState)refreshState
_refreshState =
if (refreshState
== LXWXRefreshViewStateWillRefresh) {
self.hidden = NO;
if (refreshState == LXWXRefreshViewStateRefreshing) {
if (self.refreshingBlock) {
self.refreshingBlock();
[self.layer addAnimation:_rotateAnimation forKey:AnimationKey];
} else if (refreshState == LXWXRefreshViewStateNormal) {
[self.layer removeAnimationForKey:AnimationKey];
self.transform = CGAffineTransformI
CABasicAnimation *basic =[CABasicAnimation animation];
basic.keyPath = @"position";
basic.fromValue =[NSValue valueWithCGPoint:self.center];
basic.toValue = [NSValue valueWithCGPoint:CGPointMake(self.center.x, -self.center.y)];
basic.duration = 0.5;
basic.delegate =
[self.layer addAnimation:basic forKey:PositionKey];
-(void)animationDidStop:(CABasicAnimation *)anim finished:(BOOL)flag
if ([anim.keyPath isEqualToString:PositionKey]) {
[self.layer removeAnimationForKey:PositionKey];
self.hidden = YES;
刷新view 封装完成,接下来 我们在Viewcontroller中引用下即可
十年饮冰,难凉热血。我是漫漫。文章迁移到我的个人博客:http://iphone20.top/。
1.badgeVaule气泡提示 2.git终端命令方法& pwd查看全部 &cd&ls &之后桌面找到文件夹内容,以cd xxxx ,ls格式&git status查看&git pull origin master从网上储存库中下下来。 返回上一级地址命令cd .. 3....
一、APP生命周期 //1、程序加载完毕 - (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchO //UIAppl...
在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥ios动画全貌。在这里你可以看到iOS中如何使用图层精简非交互式绘图,如何通过核心动画创建基础动画、关键帧动画、动画组、转场动画,如何通过UIView的装饰方法对这些动画操作进行简化等。在今...
在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌。在这里你可以看到iOS中如何使用图层精简非交互式绘图,如何通过核心动画创建基础动画、关键帧动画、动画组、转场动画,如何通过UIView的装饰方法对这些动画操作进行简化等。在今...
iOS的坐标系 原点是屏幕的左上角,各机型取值范围如下表所述: UIView 视图的类(略讲) @property(nonatomic) CGR 尺寸 @property(nonatomic,copy) UIColor *backgroundColor ...
江南的冬雨如夏雨般倾盆 亦如江北的大雪簌簌的下 淋湿了街道 沾湿了衣角 也打湿了眼眶 回老家的路是那么快 又那么慢 那么短 又那么长 曾经带着欢喜与温暖前行 如今却带着千愁万绪 和锥心的疼痛 去承受那沉重的消息 表面装作风平浪静 却让泪水在心里流个不停 爱人啊,要知道 有些...
coding羊最近在和几个小伙伴做一个小项目,想开发一个“图片处理小公举”,哦不,是小工具。可以实现基本的剪切、拼接、旋转,再加上模糊化、融合、变色等等酷炫功能。目前项目做了一半,其中遇到了很多困难,这里分享一下我学习的经历,也可以作为大家入门Python GUI(图形界面...
亲爱的澄澄: 最近在看龙应台的《亲爱的安德烈》,成长环境、文化差异使母子二人在交流的过程中碰撞出很多火花,龙应台的文化底蕴也使母子俩人在交流的时候更有深度,很羡慕。 记得你出生的时候,医生抱着你强迫让几近虚脱的我回答你的性别,我看到你是女孩儿,心里挺不高兴的,并不是我重男轻...
我是个没有方向感的人。无论走到哪里都不能很好地分辨出东南西北,所以,当汽车走在公路上,我只能看到太阳映在车窗上,不知往那个方向走,不辩方向,宛如迷茫的人生。 车窗外面除了黄沙还是黄沙,远处连绵的远山灰蒙蒙看不清轮廓,像是蒙了一层灰纱巾,车轮飞转在颠簸的沙石路上,带来的是止不...
双十一结束不久,快递还没到手,手机短信已纷至沓来,各种以“天猫”、“京东”为后缀的短信中,一些诈骗短信也潜伏其中。 关注大数据观察网(微信公众号:shuju_net)了解更多精彩资讯 “我明明没在京东上面购物,还是收到了一串‘106’数字开头的短信,提醒收货。”市民白先生表...随笔- 402&
&&&&&&&&&&&
BowenView.h
IOS_0302_下拉刷新
Created by ma c on 16/3/2.
Copyright & 2016年 博文科技. All rights reserved.
9 #import &UIKit/UIKit.h&
11 @interface BowenView : UIView
13 //要把loading界面加载到那个界面
14 + (void)showBowenViewFromSuperView:(UIView *)superV
15 //要把loading界面从哪个界面移除
16 + (void)removeBowenViewFromSuperView:(UIView *)superV
17 //要把loading界面加载到那个界面上(具体位置)
18 + (void)showBowenViewFromSuperView:(UIView *)superView offSetY:(CGFloat)offSetY;
BowenView.m
IOS_0302_下拉刷新
Created by ma c on 16/3/2.
Copyright & 2016年 博文科技. All rights reserved.
33 #import "BowenView.h"
35 @interface BowenView ()
37 //动态图
38 @property (nonatomic, strong) UIImageView *loadingImgV
39 //提示文字
40 @property (nonatomic, strong) UILabel *
46 @implementation BowenView
49 - (instancetype)init
self = [super init];
if (self) {
[self addSubview:self.loadingImgView];
[self addSubview:self.lbl];
59 - (UIImageView *)loadingImgView
if(!_loadingImgView){
_loadingImgView = [[UIImageView alloc] init];
_loadingImgView.frame = CGRectMake(0, 0, 80, 80);
_loadingImgView.backgroundColor = [UIColor clearColor];
//动态图属性
_loadingImgView.animationImages = [self getImageArray];
_loadingImgView.animationDuration = 2.0;
_loadingImgView.animationRepeatCount = 0;
return _loadingImgV
73 - (UILabel *)lbl
if(!_lbl){
_lbl = [[UILabel alloc] init];
_lbl.frame = CGRectMake(0, 80, 80, 30);
_lbl.text = @"正在加载...";
_lbl.font = [UIFont systemFontOfSize:14];
_lbl.textColor = [UIColor darkGrayColor];
_lbl.textAlignment = NSTextAlignmentC
85 //获取图片数组
86 - (NSArray *)getImageArray
NSMutableArray *imgArray = [NSMutableArray array];
NSMutableArray *imgNameArr = [NSMutableArray array];
for (int i=1; i&16; i++) {
NSString *imgName = [NSString stringWithFormat:@"loading_animate_%02d",i];
[imgArray addObject:imgName];
for (int i = 0; i & 15; i ++) {
UIImage *image = [UIImage imageNamed:[imgArray objectAtIndex:i]];
[imgNameArr addObject:image];
return imgNameA
106 //要把loading界面加载到那个界面
107 + (void)showBowenViewFromSuperView:(UIView *)superView
[self showBowenViewFromSuperView:superView offSetY:0];
111 //要把loading界面从哪个界面移除
112 + (void)removeBowenViewFromSuperView:(UIView *)superView
//在父视图的【所有子视图数组中】查找
for (UIView *itemView in superView.subviews) {
if ([itemView isKindOfClass:[BowenView class]]) {
[itemView removeFromSuperview];
121 //要把loading界面加载到那个界面上(具体位置)
122 + (void)showBowenViewFromSuperView:(UIView *)superView offSetY:(CGFloat)offSetY
BowenView *loadingView = [[BowenView alloc] init];
loadingView.frame = CGRectMake([UIScreen mainScreen].bounds.size.width/2 - 40, 200 + offSetY, 100, 80);
//判断superView上是否已经存在一个BowenView,如果已经存在,先删除,在加载新的View
[self removeBowenViewFromSuperView:superView];
[superView addSubview:loadingView];
//让动态图动起来
[loadingView.loadingImgView startAnimating];
阅读(...) 评论()博主最新文章
博主热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)iOS用Sketch制作APP下拉刷新的GIF动画
我的图书馆
iOS用Sketch制作APP下拉刷新的GIF动画
原文链接:http://www.jianshu.com/p/ 一、用Sketch结合MJRefresh来自定义刷新动画今天分享一下iOS关于自定义下拉刷新动画的实现。我们平时看到很多APP的下拉刷新都是菊花在转的样式,因为很多APP都是用MJRefresh默认下拉刷新来实现的。但是,我们也会看到不少APP的下拉刷新很有特色,像美团、分期乐、喵播等等。他们的刷新样式同样是用MJRefresh来实现的,MJRefresh有一个类MJRefreshGifHeader,自定义这个类可以将GIF图片集合制作成下拉刷新的动画。但是他的前提是得制作出一个GIF图片集合。前段时间我尝试用Sketch做一个GIF动画,无意间被我发现了一个很好用的插件AnimateMate,这个插件使用javaScript写的,但这不影响我们的使用。我们用Sketch ToolBox安装完插件之后就可以使用了。这里我以分期乐的刷新动画为例进行讲解。这个是最后集成到项目中的效果:下面我就分两个大的步骤来给大家讲解一下如何让自己的APP有一个专属的下拉刷新动画 :1. 用Sketch制作GIF动画2. 用MJRefreshGifHeader来集成下拉刷新动画二、用Sketch制作GIF动画1. Sketch安装插件2. 打开Sketch新建一个画板,命名为refresh,把你要画的图形放到画布上3. 接下来是按照图形把分期乐的猫头鹰画出来先分析一下这个猫头鹰:1.先用钢笔工具把头和脸的形状画出来,再进行贝兹曲线变形2.用铅笔工具把头发画出来3.鼻子就是两个三角形4.眼睛就是三个圆5.翅膀就是一个矩形弄成圆角6.身体就是三个圆7.脚是三个矩形组成的1. 选择钢笔工具2. 用钢笔工具沿着头部描7个点,最后重合第1个点和第7个点重合3. 对线条进行编辑4. 分别选中第3个点和第6个点进行贝兹曲线变形5. 接下来再用同样的方式把脸部的关键点描出来6. 对脸部的第2、5、7这三个点进行贝兹曲线变形7. 把眼睛和鼻子画出来8. 用一个矩形把翅膀画出来9. 改变翅膀的圆角为10010. 用三个圆把身体画出来11. 用6个矩形把脚画出来12. 接下来就是头发了,头发我们用铅笔工具直接画出来,铅笔工具不好把握,有一点偏差也没事13. 最后把下面的图形移到旁边,用取色的方式对各个部位填充颜色,然后把边界都去掉(注意图层的位置,如果遮挡住了,通过移动图层来使其摆放在正确的图层)14. 这样就把猫头鹰给画出来,接下来就是制作动画。4. 用AnimationMate来制作动画1. 先把整个猫头鹰按照比例调整到宽为56的大小,画板调整到宽高都为60的大小2. 将眼睛的黑色部分和大白色的圆建成一个组3. 选中所有图层->plugins->AnimateMate->Creat Animateion4. 创建第0帧的动画。KeyframeNumber为0,EasingType动画类型为线性动画linearEase。5. 改变eye_right和eye_left的Transform为359°6. 选中所有图层->plugins->AnimateMate->Creat Animateion,我们让这个猫头鹰的眼睛从0°旋转到359°分成20个关键帧。KeyframeNumber为20,EasyingType为线性动画linearEase,点击OK。7. 选中refresh图层->plugins->ExportAnimation导出动画8. 可以看到,这里我们可以导出GIF Aniamtion动图,也可以直接导出20个PNG图片。我们都勾选上,然后给导出的GIF图和PNG图填一个前缀名字fenqile_refresh。选择导出出到fenqile_refresh文件夹9. 导出之后的结果为下图所示。有20张png图片和一个gif动图。10. 用浏览器打开gif动图可以看到最终实现的效果。至此用Sketch就把这个GIF动图给制作完成了,接下来就是要用MJRefresh来自定义下拉刷新样式了三、用MJRefreshGifHeader来自定义下拉刷新样式1. 将20个png图片导入到Xcode工程2. 创建一个类CustomRefreshGifHeader继承自MJRefreshGifHeader。import UIKitimport MJRefreshclass CustomRefreshGifHeader: MJRefreshGifHeader {// MARK: 重写父类方法/**在这里做一些初始化配置(比如添加子控件)*/override func prepare() {super.prepare()var images = [UIImage]()for i in 0...20 {if i images.append(UIImage.init(named: 'fenqile_refresh_0\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\(i)')!)}else {images.append(UIImage.init(named: 'fenqile_refresh_\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\(i)')!)}}self.setImages(images, duration: 1.2, forState: MJRefreshState.Refreshing)self.setImages([UIImage.init(named: 'fenqile_refresh_00')!], forState: MJRefreshState.Pulling)self.setImages([UIImage.init(named: 'fenqile_refresh_00')!], forState: MJRefreshState.Idle)self.lastUpdatedTimeLabel.hidden = trueself.stateLabel.font = UIFont.systemFontOfSize(10)self.setTitle('释放即可刷新', forState: MJRefreshState.Pulling)self.setTitle('下拉刷新', forState: MJRefreshState.Idle)self.setTitle('刷新中', forState: MJRefreshState.Refreshing)}/**在这里设置子控件的位置和尺寸*/override func placeSubviews() {super.placeSubviews()self.gifView.contentMode = UIViewContentMode.Centerself.gifView.frame = CGRect.init(x: 0, y: 4, width: self.mj_w, height: 34)self.stateLabel.frame = CGRect.init(x: 0, y: 40, width: self.mj_w, height: 14)}}3.给TableView添加下拉刷新override func viewDidLoad() {super.viewDidLoad()tableView = UITableView(frame: CGRect(x: 0, y: 0, width: SCREEN_WIDTH, height: SCREEN_HEIGHT), style: UITableViewStyle.Grouped)view.addSubview(tableView)tableView.mj_header = CustomRefreshGifHeader.init {// loading data}}总结Sketch不仅能够制作UI图,也能制作GIF动画。我这里只是举了个例子,使用AnimationMate这个插件来做GIF动画真的很方便,但也有很多局限性。目前这款插件只能做一些线性的动画效果,像 Position、Size、Transform、Opacity等。如果要做一些比较复杂的动画那用AnimationMate就不太合适了。马上来为你的APP制作炫酷的刷新动画吧,说不定你们老板会给你涨工资呢~~。微信号:CocoaChinabbs
TA的最新馆藏
喜欢该文的人也喜欢Gif图片是非常常见的图片格式,尤其是在聊天的过程中,Gif表情使用地很频繁。但是iOS竟然没有现成的支持加载和播放Gif的类。
简单地汇总了一下,大概有以下几种方法:
一、加载本地Gif文件
1、使用UIWebView
// 读取gif图片数据
UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0,0,200,200)];
[self.view addSubview:webView];
NSString *path = [[NSBundle mainBundle] pathForResource:@"001" ofType:@"gif"];
NSData *data = [NSData dataWithContentsOfFile:path];
使用loadData:MIMEType:textEncodingName: 则有警告
[webView loadData:data MIMEType:@"image/gif" textEncodingName:nil baseURL:nil];
NSURL *url = [NSURL URLWithString:path];
[webView loadRequest:[NSURLRequest requestWithURL:url]];
但是使用UIWebView的弊端在于,不能设置Gif动画的播放时间。
2、将Gif拆分成多张图片,使用UIImageView播放
最好把所需要的Gif图片打包到Bundle文件内,如下图所示
Loading.png
- (NSArray *)animationImages
NSFileManager *fielM = [NSFileManager defaultManager];
NSString *path = [[NSBundle mainBundle] pathForResource:@"Loading" ofType:@"bundle"];
NSArray *arrays = [fielM contentsOfDirectoryAtPath:path error:nil];
NSMutableArray *imagesArr = [NSMutableArray array];
for (NSString *name in arrays) {
UIImage *image = [UIImage imageNamed:[(@"Loading.bundle") stringByAppendingPathComponent:name]];
if (image) {
[imagesArr addObject:image];
return imagesA
- (void)viewDidLoad {
[super viewDidLoad];
UIImageView *gifImageView = [[UIImageView alloc] initWithFrame:frame];
gifImageView.animationImages = [self animationImages]; //获取Gif图片列表
gifImageView.animationDuration = 5;
//执行一次完整动画所需的时长
gifImageView.animationRepeatCount = 0;
//动画重复次数
[gifImageView startAnimating];
[self.view addSubview:gifImageView];
3、使用SDWebImage
但是很遗憾,SDWebImage 的 sd_setImageWithURL:placeholderImage:这个方法是不能播放本地Gif的,它只能显示Gif的第一张图片而已。So,此方法行不通
UIImageView *gifImageView = [[UIImageView alloc] initWithFrame:frame];
[gifImageView sd_setImageWithURL:nil placeholderImage:[UIImage imageNamed:@"gifTest.gif"]];
其实,在SDWebImage这个库里有一个UIImage+GIF的类别,里面为UIImage扩展了三个方法:
@interface UIImage (GIF)
+ (IImage *)sd_animatedGIFNamed:(NSString *)
+ (UIImage *)sd_animatedGIFWithData:(NSData *)
- (UIImage *)sd_animatedImageByScalingAndCroppingToSize:(CGSize)
大家一看就知道,我们要获取处理后的Gif图片,其实只要调用前面两个中的其中一个方法就行了
注意:第一个只需要传Gif的名字,而不需要带扩展名(如Gif图片名字为001@2x.gif,只需传001即可)
我们就使用第二个方法试一试效果:
NSString *path = [[NSBundle mainBundle] pathForResource:@"gifTest" ofType:@"gif"];
NSData *data = [NSData dataWithContentsOfFile:path];
UIImage *image = [UIImage sd_animatedGIFWithData:data];
gifImageView.image =
然后通过断点,我们看下获取到的image是个什么样的东东:
我们发现:
image的isa指针指向了_UIAnimatedImage ,说明它是一个叫作_UIAnimatedImage 的类(当然,这个_UIAnimatedImage 苹果是不会直接让我们使用的)
_images 表示:这个Gif包含了多少张图片
_duration表示:执行一次完整动画所需的时长
其实,动画执续时间_duration也可以更改!
我们来看下此方法的内部实现:
+ (UIImage *)sd_animatedGIFWithData:(NSData *)data {
if (!data) {
CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef)data, NULL);
size_t count = CGImageSourceGetCount(source);
UIImage *animatedI
if (count &= 1) {
animatedImage = [[UIImage alloc] initWithData:data];
NSMutableArray *images = [NSMutableArray array];
NSTimeInterval duration = 0.0f;
for (size_t i = 0; i & i++) {
CGImageRef image = CGImageSourceCreateImageAtIndex(source, i, NULL);
duration += [self sd_frameDurationAtIndex:i source:source];
[images addObject:[UIImage imageWithCGImage:image scale:[UIScreen mainScreen].scale orientation:UIImageOrientationUp]];
CGImageRelease(image);
if (!duration) {
duration = (1.0f / 10.0f) *
animatedImage = [UIImage animatedImageWithImages:images duration:duration];
CFRelease(source);
return animatedI
很明显,duration是可以随意更改的,只不过此方法设置了一个默认值
(duration = (1.0f / 10.0f) * count)
归根到底,创建新的动态的Image其实是调用了系统提供的一个UIImage的类方法而已:
UIImage *animatedImage = [UIImage animatedImageWithImages:images duration:duration];
二、加载网络Gif文件
加载网络的Gif文件就简单多了。最简单的方法,我们只需要使用SDWebImage 的 sd_setImageWithURL:这个方法传入Gif文件是url地址即可。
纠其原因:稍微仔细看了SDWebImage内部实现就可以清楚,大概是以下几个步骤:
1、SDWebImage根据url将Gif文件下载下来,格式为一个NSData
2、如果判断是Gif格式,则会调用** sd_animatedGIFWithData:** 将Data转换成我们需要的Gif格式
3、通过上面的方法二即可显示出Gif图片
UIImage *image = [UIImage sd_animatedGIFWithData:data];
gifImageView.image =
............................................................
一、加载本地Gif文件
1、使用UIWebView不可以设置duration,其他两种方法都可设置。而且方法1的容器为UIWebView ,其余两种的容器都是大家熟悉的UIImageView
2、方法2和方法3需要对应看应用场景
如:下拉、上拉加载控件需要一个根据拉动距离设置特定的Image,则需要使用方法2
直接显示Gif图片,则使用方法3会更方便
二、加载网络Gif文件
直接使用SDWebImage 的 sd_setImageWithURL:这个方法传入Gif文件是url地址即可
............................................................
作者:镜花水月_I链接:http://www.jianshu.com/p/faf來源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
阅读(...) 评论()

我要回帖

更多关于 ios 下拉刷新动画 的文章

 

随机推荐