美文网首页iOS开发OC-开发案例收集
UIImageView和UIImage的处理

UIImageView和UIImage的处理

作者: 追逐_chase | 来源:发表于2019-04-08 14:26 被阅读0次
    timg.gif

    UIImageView的创建方式

    图片的加载方式

    • - (instancetype)initWithImage:(nullable UIImage *)image
    • 通过资源路径的方式
      • [[NSBundle mainBundle] pathForResource:@"资源名称" ofType:@"类型"]
      • + (nullable UIImage *)imageWithContentsOfFile:(NSString *)path;

    UIImageView的 contentMode(内容模式)属性

    • 这个属性是UIView的,UIImageView继承,是一个枚举值,默认UIViewContentModeScaleToFill 按比例填充 一般frame过大的话,会变形
        下面的3个属性是拉伸和压缩图片的比例
        
        按比例缩放填充 有可能会失真
        UIViewContentModeScaleToFill, 
        
        按比例缩放,根据宽高适应,不会失真      
        UIViewContentModeScaleAspectFit,
        
        按比例缩放填充,宽和高只要一个因素fill适应,其他的就在考虑
        可能只显示一部分        
        UIViewContentModeScaleAspectFill,   
        
        重新绘制 图片
        UIViewContentModeRedraw, 
        
        下面的属性 不会被拉伸         
        UIViewContentModeCenter, 居中显示        
        UIViewContentModeTop, 靠上显示
        UIViewContentModeBottom,
        UIViewContentModeLeft,
        UIViewContentModeRight,
        UIViewContentModeTopLeft,
        UIViewContentModeTopRight,
        UIViewContentModeBottomLeft,
        UIViewContentModeBottomRight
    
    
    • UIViewContentModeScaleToFill 模式

      • 图片的内容frame被完全填充,按照比例缩放,可能会图片变形
        image.png
    • UIViewContentModeScaleAspectFit 模式

      • 图片完全显示,不会引起图片变形,按照比例缩放,在缩放的过程中,如果宽或者高度,有一个因素达到frame的边缘,就会按照其适应填充,途中蓝色UIImageView的frame的大小
        image.png
    • UIViewContentModeScaleAspectFill 模式


      image.png

    UIImageView的帧动画

    • 加载图片
    • 设置动画属性
    • 执行动画
     //这个数组容器,只能存放 UIImage对象
      NSMutableArray <UIImage *> *imagesArray  = [NSMutableArray array];
      for (int i = 0; i < 10; i++) {
            NSString *imageName = [NSString stringWithFormat:@"xxxx_%d", i + 1];
            UIImage *image = [UIImage imageNamed:imageName];
            [imagesArray addObject:image];
        }
        //设置动画数组资源
        self.imageView.animationImages = imagesArray;
        //设置播放次数 无线播放
        self.imageView.animationRepeatCount = 0;
        //设置延迟的时间
        self.imageView.animationDuration = 1;
        // 开始动画
        [self.imageView startAnimating];
        
        //停止动画
        //[self.imageView stopAnimating];
    
    

    注意:上面说到UIImageView的加载图片方式的时候有2种

    • 1.imageWithName:
      • 这种方式在加载图片时,就算指向它的指针被销毁,该资源也不会被从内存干掉
      • 放到Assets.xcassets里面的资源文件,默认就有缓存的
      • 图片经常使用的,可以使用这个加载方式
    • 2.imageWithContentOfFile:
      • 指向它的指针被销毁,该资源就会被从内存中干掉

    UIImage

    创建方式

    //直接加载图片
    UIImage *image = [UIImage imageNamed:@""];
    //加载二进制数据
    UIImage *imageDa = [UIImage imageWithData:@"二进制"];
    //加载二进制数据 并有缩放
    UIImage *imageData = [UIImage imageWithData:@"二进制" scale:@"缩放小数"];
    //通过路径加载
     UIImage *image = [UIImage imageWithContentsOfFile:@"文件路径"];
    
    

    图片的压缩的2种方式

    1.系统提供的压缩方式

     UIImage *image = [UIImage imageWithContentsOfFile:@"xx.pne"];
     //png压缩
     NSData *pngData = UIImagePNGRepresentation(image);
     //jpg压缩,有压缩系数 常用
     NSData *jpgData = UIImageJPEGRepresentation(image, 1);
     
    

    2.上下文压缩图片

    
    - (UIImage *)scaleImageWithImage:(UIImage *)image withScale:(CGFloat)scale{
        //创建上下文
        CGSize imageSize = CGSizeMake(image.size.width *scale, image.size.height * scale);
        UIGraphicsBeginImageContext(imageSize);
        //重新w绘制
        [image drawInRect:CGRectMake(0, 0, image.size.width *scale, image.size.height *scale)];
        //获取到绘制的图片
        UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
        //结束上下文
         UIGraphicsEndImageContext();
        return newImage;
    }
    
    
    

    相关文章

      网友评论

        本文标题:UIImageView和UIImage的处理

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