zoukankan      html  css  js  c++  java
  • iOS加载Gif图片的N种方式 By-H罗

    1.系统UIImageView 多张图片组成动画

    /**
     *   UIImageView 动画
     *   Memory-23M
     */
    -(void)gifPlay1
    {
    //    NSArray  *array=@[@"image0.png",@"image1.png",@"image2.png"];
    //    UIImageView  *imgview= [UIImageView imageViewAnimation:CGRectMake(50,80, 550/2, 200)  imageNames:array duration:1];
        
        UIImageView* animatedImageView = [[UIImageView alloc] initWithFrame:CGRectMake(50,80, 550/2, 200)];
        animatedImageView.animationImages =@[[UIImage imageNamed:@"image0"],
                                             [UIImage imageNamed:@"image1"],
                                             [UIImage imageNamed:@"image2"],
                                             ];
        animatedImageView.animationDuration = 1.0f;
        animatedImageView.animationRepeatCount = 0;
        [self.view addSubview: animatedImageView];
        [animatedImageView startAnimating];
    }
    

    2.利用第三方库

    1)IImageView-PlayGIF  YFGIFImageView

    /**
     *  UIImageView-PlayGIF 是 UIImageView 子类,用来显示 GIF。UIIMageView-PlayGIF 性能高,而且占用的内存很低。
     *  https://github.com/yfme/UIImageView-PlayGIF
     *  Memory-21.9M
     *  #import "YFGIFImageView.h"
     */
    -(void)gifPlay2
    {
        NSString  *gifPath=[[NSBundle mainBundle] pathForResource:@"test" ofType:@"gif"];
        YFGIFImageView  *gifview=[[YFGIFImageView alloc]init];
        gifview.backgroundColor=[UIColor clearColor];
        gifview.gifPath=gifPath;
        gifview.frame=CGRectMake(50, 100,550/2, 200);
        [self.view addSubview:gifview];
        [gifview startGIF];
    }
    

    2)SCGIFImageView

    /**
     *  摘要: SCGIFImageView是一个开源的GIF图片动画显示控件,通过将GIF的每一帧都取出来生成UIImage对象存放在一个数组中,然后使用NSTimer进行动画轮转。
     *  https://github.com/shichangone/SCGifExample
     *  Memory-22.5M
     *  #import "SCGIFImageView.h"
     */
    -(void)gifPlay3
    {
        NSString* filePath = [[NSBundle mainBundle] pathForResource:@"test.gif" ofType:nil];
        NSData* imageData = [NSData dataWithContentsOfFile:filePath];
        SCGIFImageView* gifImageView = [[SCGIFImageView alloc]init];
        [gifImageView setData:imageData];
        gifImageView.frame = CGRectMake(50,100, gifImageView.image.size.width, gifImageView.image.size.height);
        [self.view addSubview:gifImageView];
    }
    

    3)YLGIFImage

    /**
     *  YLGIFImage 是异步 GIF 图像解码器和图像查看器,支持播放 GIF 图像,而且使用很少的内存。
     *  https://github.com/liyong03/YLGIFImage
     *  Memory-22.7M
     *  #import "YLImageView.h"
     *  #import "YLGIFImage.h"
     */
    -(void)gifPlay5
    {
        YLImageView* imageView = [[YLImageView alloc] initWithFrame:CGRectMake(0, 160, 320, 240)];
        [self.view addSubview:imageView];
        imageView.image = [YLGIFImage imageNamed:@"test.gif"];
    }
    

    4)SDWebImageView里的UIImage+GIF

    提供接口:

    + (UIImage *)sd_animatedGIFNamed:(NSString *)name;
    + (UIImage *)sd_animatedGIFWithData:(NSData *)data;
    - (UIImage *)sd_animatedImageByScalingAndCroppingToSize:(CGSize)size;

    /**
     *  利用SDWebImageView 库播放gif
     *  Memory-22.6M
     *  #import "UIImage+GIF.h"
     */
    -(void)gifPlay6
    {
        UIImage  *image=[UIImage sd_animatedGIFNamed:@"test"];
        UIImageView  *gifview=[[UIImageView alloc]initWithFrame:CGRectMake(50,80,image.size.width, image.size.height)];
        gifview.backgroundColor=[UIColor orangeColor];
        gifview.image=image;
        [self.view addSubview:gifview];
    }
    

    为MBProgressHUD 添加加载动画

    /**
     *  MBProgressHUD 添加加载动画
     *  Memory-23.8M
     *  #import "UIImage+GIF.h"
     *  #import "MBProgressHUD.h"
     */
    -(void)gifPlay6
    {
        UIImage  *image=[UIImage sd_animatedGIFNamed:@"test"];
        UIImageView  *gifview=[[UIImageView alloc]initWithFrame:CGRectMake(0,0,image.size.width/2, image.size.height/2)];
        gifview.image=image;
        
        MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
        hud.color=[UIColor grayColor];//默认颜色太深了
        hud.mode = MBProgressHUDModeCustomView;
        hud.labelText = @"加载中...";
        hud.customView=gifview;
    }
    

    其它

    微博客户端 VVebo 的作者开源了他自己为VVebo写的GIF解决方案 VVeboImageView, 占用内存很小。(iOS移动开发周报-第4期)

     

     
    Demo下载
    http://yunpan.cn/cj6JBN7mfETWE (提取码:226f)
     
     
     
     
     
     
     
  • 相关阅读:
    ios 如何获得系统时间和日期
    IOS开发使用委托delegate在不同窗口之间传递数据
    集合视图UICollectionView 介绍及其示例程序
    iOS6新特征:UICollectionView介绍
    ios delegate和protocol
    iOS页面跳转及数据传递
    [转载]iOS6新特征:UICollectionView官方使用示例代码研究
    跟上潮流:十大移动应用开发平台
    UITextField 如何设置为密码方式显示?
    【转】 Android中Intent组件详解
  • 原文地址:https://www.cnblogs.com/sixindev/p/4487829.html
Copyright © 2011-2022 走看看