文档章节

IOS UIImageView & 汤姆猫实例

卧龙小
 卧龙小
发布于 2014/12/17 23:40
字数 621
阅读 444
收藏 6

一 UIImageView 简介

UIImageView是显示图片的控件,显示图片时,首先需要把图片加载到UIImage控件中,然后根据UIImage控件,设置到UIImageView相对应的属性中


1 创建UIImage对象
//使用应用程序中图片文件创建,IOS4后可以省略图片扩展名;
+ (UIImage *)imageNamed:(NSString *)name;


//根据指定的路径创建UIImage
+ (UIImage *)imageWithContentsOfFile:(NSString *)path;
- (instancetype)initWithContentsOfFile:(NSString *)path;


//使用NSData创建
+ (UIImage *)imageWithData:(NSData *)data;
- (instancetype)initWithData:(NSData *)data;


//使用Quartz 2D对象创建UIImage
+ (UIImage *)imageWithCGImage:(CGImageRef)cgImage;
- (instancetype)initWithCGImage:(CGImageRef)cgImage;


注意:

UIImage imageNamed 会自动缓存图标,会占用大量内存,推荐使用 IImage imageWithContentOfFile:(NSString *);


2设置UIImage对象到UIImageView中
//单个图片对象
@property(nonatomic,retain) UIImage *image;


//用数组存储的多个图片对象
@property(nonatomic,copy) NSArray *animationImages;


3 创建UIImageView
//创建image对象
UIImage *image = [UIImage imageNamed:@"imageName"];
UIImage *image = [UIImage imageWithContentsOfFile:[bundle pathForResource:@"imageName" ofType:nil]]


//添加image对象到UIImageView中
UIImageView *imageView = [[UIImageView alloc]initWithImage:image];


二 UIImageView 动画功能

查看UIImageView头文件的相关属性

//设置图片,animationImages 是NSArray数组中包含的UIImage
@property (nonatomic,copy) NSArray *animationImages;

//设置播放次数,不指定为无限循环播放
@property (nonatomic)NSInteger animationRepeatCount;

//设置播放速度,动画持续的时间
@property (nonatomic)animationDuration;

//启动动画
- (void)startAnimating;

//停止动画
- (void)stopAnimating;

//判断动画是否在运行
- (BOOL)isAnimating;


注意

在动画执行完毕后,需要清理缓存,把UIImageView赋值为nil


三 汤姆猫代码

@interface ViewController ()

/**
 *  属性
 */
@property (weak, nonatomic) IBOutlet UIImageView *tomImageView;


/**
 *  喝牛奶
 */
-(IBAction)drink;
-(IBAction)cymbal;
-(IBAction)fart;
-(IBAction)pie;
-(IBAction)scratch;
-(IBAction)eat;

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
	// Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


/**
 *  喝牛奶
 */
-(IBAction)drink
{
    [self runAnimationImagesWithFilePrefix: @"drink" andFileCount:80];
}

-(IBAction)cymbal
{
    [self runAnimationImagesWithFilePrefix: @"cymbal" andFileCount:12];
}

-(IBAction)fart
{
    [self runAnimationImagesWithFilePrefix: @"fart" andFileCount:27];
}

-(IBAction)pie
{
    [self runAnimationImagesWithFilePrefix: @"pie" andFileCount:23];
}

-(IBAction)scratch
{
    [self runAnimationImagesWithFilePrefix: @"scratch" andFileCount:55];
}

-(IBAction)eat
{
    [self runAnimationImagesWithFilePrefix: @"eat" andFileCount:39];
}





/**
 *  播放动画
 *
 *  @param filePrefix 动画图片前缀
 *  @param count      动画图片张数
 */

-(void)runAnimationImagesWithFilePrefix:(NSString*)filePrefix andFileCount:(NSInteger)count
{
    
    NSInteger imageTotal = count;
    //    1.在动画播放时,不能点击
    if([self.tomImageView isAnimating]){
        return;
    }
    
    //    2.保存图片到数组
    NSMutableArray *images = [NSMutableArray arrayWithCapacity:imageTotal];
    for (int i=0; i<=imageTotal; i++) {
        NSBundle *bundle = [NSBundle mainBundle];
        NSString *imageName = [NSString stringWithFormat:@"%@_%02d.jpg",filePrefix,i];
        [images addObject:[UIImage imageWithContentsOfFile:[bundle pathForResource:imageName ofType:nil]]];
    }
    
    //    3.把数组赋值给tomImageView
    self.tomImageView.animationImages=images;
    
    
    //    4.播放动画
    NSInteger delay = images.count*0.09;
    //    4.1设置播放次数
    self.tomImageView.animationRepeatCount=1;
    //    4.2设置播放持续时间
    self.tomImageView.animationDuration=delay;
    //    4.3开始播放
    [self.tomImageView startAnimating];
    
    //    5调用清空缓存
    [self performSelector:@selector(clearCache) withObject:nil afterDelay:delay];
}


/**
 *  清空缓存
 */
-(void)clearCache
{
    self.tomImageView.animationImages=nil;
}
@end






© 著作权归作者所有

下一篇: IOS UIView
卧龙小
粉丝 42
博文 146
码字总数 70107
作品 0
西城
程序员
私信 提问
使用 Interface Builder 兼容 iOS6 和iOS7

当你在更新你的App到iOS 7的平台时遇到最大的挑战之一就是确保不要遗忘那些还在使用iOS 6平台的用户,在此我们提供一些建议使你的App应用在iOS 6和iOS 7上同时保留视觉吸引力和技术功能. 此图...

isaced
2014/01/15
13.4K
12
Android bug和样式调整 2017.1.8

1.发起直播的图标请更换 2.视频直播分享,分享的视频直播页面是空白的。(之前ios也碰到过已搞定) ---------------- 2017.1.5 ---------------- 1.现场直播 和 俱乐部 图标搞反了。 2.用户登...

6pker
2017/01/05
2
0
【迭代一】APP需求 2016.12.3

服务器开发测试环境地址: http://101.200.82.57:8886/CatMatchBackEndV2_war/ HealthTest API: http://101.200.82.57:8886/CatMatchBackEndV2_war/app/echo/v1/echo.io?msg=hello 原型图 密......

6pker
2016/10/16
2
0
区块链游戏加密猫与HTC达成合作,将登陆HTC部分手机产品

区块链游戏加密猫与HTC达成合作,将登陆HTC部分手机产品 2018-07-12 17:03编辑: yyuuzhu分类:区块链来源:巴比特 区块链游戏 招聘信息: iOS开发 iOS开发 iOS开发 app开发上架H5技术 app开...

yyuuzhu
2018/07/12
0
0
iOS 如何解决UITableView刷新卡顿现象

对之前的项目总结一下: 事情是这样的,我需要在定制Cell完成新闻类app的展示 虽然说SDWebImage提供了一个方法,异步加载图片到UIImageView上 但是,有些时候。需要的图片并不是需要铺满UII...

萨斯辈的呼唤
2014/08/18
3.6K
0

没有更多内容

加载失败,请刷新页面

加载更多

sync.Mutex 互斥锁

说明: 互斥锁用来保证在任一时刻,只能有一个例程访问某对象。Mutex 的初始值为解锁状态。Mutex 通常作为其它结构体的匿名字段使用,使该结构体具有 Lock 和 Unlock 方法。Mutex 可...

李琼涛
1分钟前
0
0
自建redis笔记

自建redis笔记 最近在linux安装了一下redis,特做一些笔记! 本文先单节点启动redis,然后再进行持久化配置,在次基础上,再分享搭建主从模式的配置以及Sentinel 哨兵模式及集群的搭建 单节点...

北极之北
4分钟前
0
0
扛住阿里双十一高并发流量,Sentinel是怎么做到的?

Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景 本文介绍阿里开源限流熔断方案Sentinel功能、原理、架构、快速入门以及相关框架比较 基本介绍 1 名词解释 服务限流 :当系统资源...

分布式系统架构
5分钟前
0
0
事假杨晨龙(Z16021)月薪请假单

svn co URL --username xxx-- password yyy ./

桃花飞舞
29分钟前
2
0
当Activity关闭后,网络请求回调的处理

当我们在使用网络请求的时候,一般都是通过回调来获取请求到的数据。对于网络请求的回调需要注意的几个点 比如我们的回调在Activity中处理数据,当我们把Activity关闭后,如果获取到数据时,...

shzwork
30分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部