UIImageView
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic,strong)NSArray *pic;
// 自定义索引,控制图片显示
@property(nonatomic,assign)int index;
@end
@implementation ViewController
// 重写pic属性的get方法: 懒加载
- (NSArray *)pic{
if(_pic == nil) {
// 加载plist文件中的数据到_pic,
//[NSBundle mainBundle]标识获取这个app安装到手机上时的目录
NSString *path = [[NSBundle mainBundle] pathForResource:@"pics.plist" ofType:nil];
NSArray *array = [NSArray arrayWithContentsOfFile:path];
NSLog(@"count:%ld", array.count);
_pic = array;
}
return _pic;
}
-(IBAction)next{ // 下一张
// 1. 索引+1;获取数组中数据;将数据设置给控件
self.index++;
[self setData];
}
-(IBAction)preview{ // 上一张
self.index--;
[self setData];
}
-(void)setData{ // 设置控件数据
NSDictionary * dict = self.pic[self.index];
// self.lblIndex.text = [NSString stringWithFormat:@"%d/%ld", self.index+1, self.pic.count];
// self.imgViewIcon.image = [UIImage imageNamed:dict[@"icon"]];
// self.lblTitle.text = dict[@"title"];
// self.btnPre.enabled = (self.index != 0);
// self.btnNext.enabled = (self.index != (self.pic.count - 1));
}
// 控制器的view,加载完毕后执行的方法
- (void)viewDidLoad {
[super viewDidLoad];
[self setData]; // 页面初始化显示,显示第一张图片信息。
}
@end
汤姆猫帧动画效果:
快速切图片,调用图片的方法:帧动画。
UIImageView帧动画相关属性和方法
@property(nonatomic,copy)NSArray *animationImages;
// 需要播放的序列帧图片数组(里面都是UIImage对象,会按照顺序显示里面的图片)
@property(nonatomic)NSTimeInterval animationDuration; 帧动画的持续时间
@property(nonatomic)NSInteger animationRepeatCount; 帧动画的执行次数,默认无限循环
-(void)startAnimating;
-(void)stopAnimating;
-(BOOL)isAnimating; // 是否正在执行帧动画
@implementation ViewController
- (void)viewDidLoad{
[super viewDidLoad];
}
- (IBAction)fart {
[self startAnimating:27 picName:@:"fart"];
}
- (IBAction)drink {
[self startAnimating:81 picName:@:"drink"];
}
// 执行动画方法
- (void)startAnimating:(int)count imgName:(NSString *)imgName {
// 正在执行动画,直接return不开启新的动画。
if(self.imgViewCat.isAnimating) {
return;
}
NSMutableArray *arrayM = [NSMutableArray array];
for(int i=0; i<count; i++) {
// 保留两位,不足的补0. 拼接图片名称
NSString *imgName = [NSString stringWithFormat:@"%@_%02d.jpg", imgName, i];
// 加载图片,会缓存图片。加载好的图片会一直保存在内存,不释放。缺点:占用内存过大。
// 每张图片,系统都会缓存。
// UIImage *imgCat = [UIImage imageNamed: imgName];
// *解决办法:不使用缓存,不再传递图片的路径。* 建议拷贝图片资源到项目根目录下,与plist文件同级。
NSString *path = [[NSBundle mainBundle] pathForResource:imgName ofType:nil];
UIImage *imgCat = [UIImage imageWithContentsOfFile: path];
[arrayM addObject:imgCat]; // 图片加到数组中
}
// 1.设置UIImageView的animationImages属性
self.imgViewCat.animationImages = arrayM;
// 2.设置动画持续时间,是否需要重复播放
self.imgViewCat.animationDuration = self.imgViewCat.animationImages.count *0.2;
self.imgViewCat.animationRepeatCount = 1;
// 3.开启动画
[self.imgViewCat startAnimating];
// 等到动画执行完毕,清空图片的集合animationImages, 延迟执行。优化内存。
[self.imgViewCat performSeletor:@selector(setAnimationImages:)
withObject:nil
afterDelay:self.imgViewCat.animationImages.count*0.2];
}
@end