UIImageView
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self aboutImageView];
}
- (void)aboutImageView{
//1. 实例化一个imageView
UIImageView *imageView = [[UIImageView alloc] init];
//2.设置一个frame
// imageView.frame = CGRectMake(100, 100, 100, 100);
//全屏大小
imageView.frame = self.view.bounds;
//3.设置一个背景颜色
imageView.backgroundColor = [UIColor redColor];
//4。添加到屏幕上显示 写在最后也可以
[self.view addSubview:imageView];
//UIImageView常用属性的方法(写在前面和写在这里都是差不多)
// 设置要显示的图片
imageView.image = [UIImage imageNamed:@"cat_angry0000.jpg"];
//设置图片的填充方式
//contentMode 最适合这个imageView 这个用 其他类的也可以用
// UIViewContentModeScaleToFill, //拉伸铺满, 有可能会导致图形变型
// UIViewContentModeScaleAspectFit, //保持原图的比例不变,适应imageView
// UIViewContentModeScaleAspectFill,//保持原图的比例不变,在拉伸到填充到imageView为止。(有可能会超出image的范围)
imageView.contentMode = UIViewContentModeScaleAspectFill;
//超出视图部分裁剪
imageView.clipsToBounds = YES;
//imageView动画
//所谓imageView的动画(帧图片),帧就是给imageView一组图片,imageView不停的去播放这组图片即可
//实例化一个可变数组,用来存放所有的图片的对象
NSMutableArray *imgs = [NSMutableArray array];
//循环读取图片
for (int i = 0; i < 30;i ++) {
//1.格式化图片的名称
//cat_foot_left0000
NSString *name = [NSString stringWithFormat:@"cat_foot_left00%02d.jpg",i];
//2.通过名字,生成UIImage
// UIImage *image = [UIImage imageNamed:name];
NSString *path = [[NSBundle mainBundle] pathForResource:name ofType:nil];
UIImage *image = [UIImage imageWithContentsOfFile:path];
//3.把图片对象添加到数组中
[imgs addObject:image];
}
//设置动画的每一帧(每一张图片)
imageView.animationImages = imgs;
//设置动画持续的时间,单位是秒
// NSTimeInterval 就是double
imageView.animationDuration = 1;
//设置动画播放的次数(0表示无数次)
imageView.animationRepeatCount = 2;
//开始动画
[imageView startAnimating];
//结束动画
// [imageView stopAnimating];
#warning imageView帧动画可能会有一个内存占用的问题
//原因:
//UIImage对象要读取一张图片, 会占用内存
//imageNamed这个方法会把图片缓存到内存中。不会自动释放
//解决:
// 换一种方式读取图片,并且在合适的时机释放
//在动画播放完之后释放图片调用即可
//在动画的播放时间 * 动画的播放次数之后,就可以去释放这些图片了
//解决方案一: 怎样延时执行一些事件?
//1.用NSTimer实现
//2.在一段时间之后,延时处理一些事情:第一个参数表示延时的时间,第二个参数表示一段时间之后,需要处理的事件
float delay = imageView.animationDuration *imageView.animationRepeatCount;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delay * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
// 在这里是一段时间之后,需要处理的事件
// 释放帧动画数组中所有的图片
imageView.animationImages = nil;
});
}
@end
网友评论