美文网首页
2.3 UIImageView

2.3 UIImageView

作者: 草根小强 | 来源:发表于2019-04-08 16:45 被阅读0次

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

相关文章

网友评论

      本文标题:2.3 UIImageView

      本文链接:https://www.haomeiwen.com/subject/ikrpiqtx.html