iOS 直接加载gif动画

原创 2015年07月10日 15:37:31
<pre name="code" class="objc">// iOS 加载gif动画,不用一帧帧切图,直接实现加载.gif图片
</pre><pre name="code" class="objc">// 首先我们定义了一个<span style="font-family: Arial, Helvetica, sans-serif;">NTVGifAnimationView类,来加载</span>
#import <UIKit/UIKit.h>
#import <MobileCoreServices/MobileCoreServices.h>
#import <ImageIO/ImageIO.h>

#define Gif_W 114
#define Lab_H 30
#define Gif_H (114+Lab_H)

@interface NTVGifAnimationView : UIView
{
    CGImageSourceRef _gif; // 保存gif动画
    NSDictionary *_gifProperties; // 保存gif动画属性
    size_t _index; // gif动画播放开始的帧序号
    size_t _count; // gif动画的总帧数
    NSTimer *_timer; // 播放gif动画所使用的timer
    UIView *_gifView;
    UILabel *_label;
}
</pre><pre name="code" class="objc"><p class="p1"><span class="s1">/**</span></p><p class="p2"><span class="s2"> *  初始化方法</span></p><p class="p1"><span class="s1"> *</span></p><p class="p1"><span class="s1"> *  @param frame </span><span style="font-family: Arial, Helvetica, sans-serif;">NTVGifAnimationView 对象的</span><span style="font-family: Arial, Helvetica, sans-serif;">frame</span></p><p class="p1"><span class="s1"> *  @param <span style="font-family: Arial, Helvetica, sans-serif;">filePath gif图片地址</span></span></p><p class="p1"><span class="s1"> *</span></p><p class="p1"><span class="s1"> */</span></p>
- (id)initWithFrame:(CGRect)frame filePath:(NSString *)filePath;

- (void) playGif; // 播放gif动画
- (void)stopGif;  // 停止gif动画

@end


</pre><br /><pre name="code" class="objc">#import "NTVGifAnimationView.h"

#import <QuartzCore/QuartzCore.h>

@implementation NTVGifAnimationView

- (id)initWithFrame:(CGRect)frame filePath:(NSString *)filePath
{
    self = [super initWithFrame:frame];
    if (self)
    {
        CGRect rect = frame;
        _gifView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, rect.size.width, rect.size.height - Lab_H)];
        _gifView.backgroundColor = [UIColor clearColor];
        [self addSubview:_gifView];
        _label = [[UILabel alloc]initWithFrame:CGRectMake(0, CGRectGetMaxY(_gifView.frame), rect.size.width, Lab_H)];
        _label.textAlignment = NSTextAlignmentCenter;
        _label.backgroundColor = [UIColor clearColor];
        _label.text = @"加载中...";
        [self addSubview:_label];
        
        NSDictionary *gifLoopCount = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:0] forKey:(NSString *)kCGImagePropertyGIFLoopCount];
        
        _gifProperties = [NSDictionary dictionaryWithObject:gifLoopCount forKey:(NSString *)kCGImagePropertyGIFDictionary];
        
        _gif = CGImageSourceCreateWithURL((CFURLRef)[NSURL fileURLWithPath:filePath], (CFDictionaryRef)_gifProperties);
        
        _count =CGImageSourceGetCount(_gif);
        
        
    }
    return self;
}

-(void)play
{
    _index ++;
    _index = _index%_count;
    CGImageRef ref = CGImageSourceCreateImageAtIndex(_gif, _index, (CFDictionaryRef)_gifProperties);
    _gifView.layer.contents = (__bridge id)ref;
    CFRelease(ref);
}

- (void)dealloc
{
    DLog(@"dealloc");
    CFRelease(_gif);
}

- (void) playGif
{
    _timer = [NSTimer scheduledTimerWithTimeInterval:0.03 target:self selector:@selector(play) userInfo:nil repeats:YES];
    [_timer fire];
}

- (void)stopGif
{
    [_timer invalidate];
    _timer = nil;
    [self removeFromSuperview];
}

@end
</pre><pre name="code" class="objc">


版权声明:本文为博主原创文章,未经博主允许不得转载。

iOS-Gif图片展示N种方式(原生+第三方)

原生方法:1.UIWebView 特点:加载速度略长,性能更优,播放的gif动态图更加流畅。//动态展示GIF图片-WebView -(void)showGifImageWithWebView{ ...
  • qiuxuewei2012
  • qiuxuewei2012
  • 2016年03月02日 20:29
  • 5466

iOS知识 ----加载显示gif图片

iOS针对gif图片播放的问题,由于iOS无法直接播放gif图片,所以可以通过以下方式进行播放   UIImageView用来显示图片, 使用UIImageView中的动画数组来实现图片的动画...
  • x567851326
  • x567851326
  • 2016年03月21日 17:58
  • 528

iOS加载Gif图片的N种方式

1.系统UIImageView 多张图片组成动画 /** * UIImageView 动画 * Memory-23M */ -(void)gifPlay1 { // ...
  • u011862058
  • u011862058
  • 2016年07月15日 16:26
  • 14598

iOS 播放gif图片

不用任何第三方实现播放GIF图功能,可以单次播放,也可循环播放。如果用SDWebImage在网上下载下来的GIF图是循环播放的,如果需要指定比方次数,本篇一定对你有所帮助...
  • pangshishan1
  • pangshishan1
  • 2017年06月22日 14:38
  • 255

iOS 加载GIF图片

要做一个tableview,cell内全部展示的是GIF。GIF是由多个image组成的,测试过后,得到几种使用方法,介绍一下:1.最省心的,使用sdwebimage,使用imageview sdse...
  • qq_27633421
  • qq_27633421
  • 2018年01月03日 17:47
  • 36

iOS 直接加载gif动画

iOS 加载gif动画,不用一帧帧切图,直接实现加载.gif图片
  • lpf123go
  • lpf123go
  • 2015年07月10日 15:37
  • 1363

iOS中GIF图片的加载

Gif图片是非常常见的图片格式,尤其是在聊天的过程中,Gif表情使用地很频繁。但是iOS竟然没有现成的支持加载和播放Gif的类。 简单的上网搜了一下,大概有三种方法: 1、使用UIWebView ...
  • Dick_xyg
  • Dick_xyg
  • 2016年08月27日 11:51
  • 1985

iOS 加载gif动画

iOS 加载gif动画相关代码如下 - (void)viewDidLoad { [super viewDidLoad]; // 先引用ImageIO 获取gifSource #...
  • LONG_IOS
  • LONG_IOS
  • 2016年02月22日 15:38
  • 349

iOS 加载Gif图片

Gif图片是非常常见的图片格式,尤其是在聊天的过程中,Gif表情使用地很频繁。但是iOS竟然没有现成的支持加载和播放Gif的类。 简单地汇总了一下,大概有以下几种方法: 一、加载本地Gif...
  • u010960265
  • u010960265
  • 2017年11月30日 16:22
  • 56

iOS中直接使用Gif图片

今天有两个朋友问我如何直接在iOS中使用GIF图片,查了下咱们的度娘看到了简单的方法就是直接使用webView来加载。webView的好处在于每个subFrame之间的delay可以按照图片的设定显示...
  • w82726194
  • w82726194
  • 2016年05月16日 19:50
  • 147
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS 直接加载gif动画
举报原因:
原因补充:

(最多只允许输入30个字)