多平台保持统一风格的UI设计,少不了一些动态图片的使用

1、本地GIF图片使用

1.1 将本地GIF转为NSdata类型

  NSData *tempdata = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"networkLoading" ofType:@"gif"]];
UIImageView *imgView = [[UIImageView alloc] initWithImage:[self decodeGifImageByData:tempdata]];

1.2 通过自定义方法处理GIF的data数据

 //解压gif的data为图片数组
-(UIImage *)decodeGifImageByData:(NSData *)data {
//获取data资源器,这个可以直接操作图片data
CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef)data, nil);
//获取图片数量 size_t 类似于无符号int
size_t count = CGImageSourceGetCount(source);
UIImage * animationImage; //如果只有一张则直接解压
if (count <= ) {
animationImage = [[UIImage alloc]initWithData:data];
}
else {
NSMutableArray * imageArray = [NSMutableArray arrayWithCapacity:count];
NSTimeInterval duration = 0.0f;
//遍历获取每一张图片
for (size_t i = ; i < count; i++) {
//解析图片拿到图片画笔拿到图片画笔
CGImageRef imageRef = CGImageSourceCreateImageAtIndex(source, i, NULL);
duration += [self imageDurationAtIndex:i source:source];
//scale:图片缩放因子 默认1 orientation:图片绘制方向 默认网上
[imageArray addObject:[UIImage imageWithCGImage:imageRef scale:[UIScreen mainScreen].scale orientation:UIImageOrientationUp]];
CGImageRelease(imageRef);
} //如果没有抓取到图片播放时间,则按照0.1秒一张的方式来了播放
if (!duration) {
duration = (1.0f / 10.0f) * count;
}
animationImage = [UIImage animatedImageWithImages:imageArray duration:duration];
} CFRelease(source);
return animationImage;
} //获取每一张图片的持续时间
-(float)imageDurationAtIndex:(NSUInteger)index source:(CGImageSourceRef)source {
float imageDuration = 0.1f;
//获取指定图像的属性信息 如宽、高、持续时间等都在里面 详情参考 CGImageProperties
CFDictionaryRef cfImageProperties = CGImageSourceCopyPropertiesAtIndex(source, index, nil);
if (!cfImageProperties) {
return imageDuration;
}
NSDictionary * imageProperties = (__bridge NSDictionary *) cfImageProperties;
//拿到gif图的属性信息 获取每一帧的时间
NSDictionary * gifProperties = [imageProperties valueForKey:(NSString *)kCGImagePropertyGIFDictionary];
NSNumber * delayTime = [gifProperties valueForKey:(NSString *)kCGImagePropertyGIFUnclampedDelayTime];
if (delayTime != nil) {
return delayTime.floatValue;
} return imageDuration;
}

iOS GIF图片转UIImage的更多相关文章

  1. ios专题 - 图片(UIImage)获取方法

    说到图片获取的方法,就得看API文档. UIImage生成实例的方法有: 1)imageNamed 从指定文件返回对象. 这个方法有个比较特殊的地方:该方法首先从系统缓存中寻找该图片,如果有,则从缓存 ...

  2. UIImage 和 iOS 图片压缩UIImage / UIImageVIew

    UIImageView 制作气泡 stretchableImageWithLeftCapWidth http://blog.csdn.net/justinjing0612/article/detail ...

  3. iOS多图片下载

    iOS多图片下载.在cell里面下载图片.做了缓存优化. (app.icon是图片地址) // 先从内存缓存中取出图片 UIImage *image = self.images[app.icon]; ...

  4. iOS UIButton 图片文字上下垂直布局 解决方案

    实现如图所示效果: 这是一个UIButton,需要改变image和title相对位置. 解决如下: //设置文字偏移:向下偏移图片高度+向左偏移图片宽度 (偏移量是根据[图片]大小来的,这点是关键)b ...

  5. IOS中图片拉伸技巧与方法总结(转载)

    以下内容转载自:http://my.oschina.net/u/2340880/blog/403996 IOS中图片拉伸技巧与方法总结 一.了解几个图像拉伸的函数和方法 1.直接拉伸法 简单暴力,却是 ...

  6. iOS 除去图片的白色背景(接近白色),或者其它颜色的替换,获取像素点的ARGB值

    iOS 除去图片的白色背景(接近白色),或者其它颜色的替换 方法如下: //去除图片的白色背景 + (UIImage*) imageToTransparent:(UIImage*) image { / ...

  7. iOS开发中关于UIImage的知识点总结

    UIImage是iOS中层级比较高的一个用来加载和绘制图像的一个类,更底层的类还有 CGImage,以及iOS5.0以后新增加的CIImage.今天我们主要聊一聊UIImage的三个属性: image ...

  8. ios中图片的绘画和截图

    ios中图片的绘画和截图 CGImageCreateWithImageInRect截图和UIGraphicsGetImageFromCurrentImageContext绘画图片 使用CGImageC ...

  9. 谈谈 iOS 中图片的解压缩

    原文 对于大多数 iOS 应用来说,图片往往是最占用手机内存的资源之一,同时也是不可或缺的组成部分.将一张图片从磁盘中加载出来,并最终显示到屏幕上,中间其实经过了一系列复杂的处理过程,其中就包括了对图 ...

随机推荐

  1. Github标星3K+,热榜第三,一网打尽数据科学速查表

    这几天,Github上的趋势榜一天一换. 这次一个名为 Data-Science--Cheat-Sheet 的项目突然蹿到了第三名. 仔细一看,确实干货满满.来,让文摘菌推荐一下~ 这个项目本质上是备 ...

  2. nim博弈 LightOJ - 1253

    主要是写一下nim博弈的理解,这个题有点奇怪,不知道为什么判断奇偶性,如果有大佬知道还请讲解一下. //nim博弈 //a[0]~a[i] 异或结果为k 若k=0 则为平衡态 否则为非平衡态 //平衡 ...

  3. java新时间类

    时间 java8以前使用的时间很多方法都已经废弃了,而且不是线程安全的,java8提供了一系列的时间类,这些时间类都是线程安全的 LocalDate.LocalTime.LocalDateTime 这 ...

  4. liunx 上安装redis

    目录 1.安装包 2.解压:tar xzf redis-5.0.5.tar.gz 3.安装 4.编辑redis.conf文件 5.配置密码 6.启动配置: 7.配置公网链接 8.杀掉redis进程 9 ...

  5. [讲解]网络流最大流dinic算法

    网络流最大流算法dinic ps:本文章不适合萌新,我写这个主要是为了复习一些细节,概念介绍比较模糊,建议多刷题去理解 例题:codevs草地排水,方格取数 [抒情一下] 虽然老师说这个多半不考,但是 ...

  6. go语言学习基础-编译文件

    1.创建工程在go的src目录下,比如我的go目录为/Users/yinxin/go,我创建文件夹 test路径为/Users/yinxin/go/src/test; 2.创建文件 main.go , ...

  7. B【USACO 2015 Jan Gold】牧草鉴赏家

    时间限制 : 10000 MS   空间限制 : 65536 KB 问题描述 约翰有n块草场,编号1到n,这些草场由若干条单行道相连.奶牛贝西是美味牧草的鉴赏家,她想到达尽可能多的草场去品尝牧草. 贝 ...

  8. B. Kvass and the Fair Nut

    B. Kvass and the Fair Nut time limit per test 1 second memory limit per test 256 megabytes input sta ...

  9. python中汉字转数字

    #!/usr/bin/env python # -*- coding: utf-8 -*- common_used_numerals_tmp ={'零':0, '一':1, '二':2, '三':3, ...

  10. 队列的含义以及C语言实现顺序队列

    队列,和栈一样,也是一种对数据的"存"和"取"有严格要求的线性存储结构. 什么是队列 与栈结构不同的是,队列的两端都"开口",要求数据只能从 ...