• UIImage的几种初始化方式以及在UIImageView中内容模式的设置


        1,使用 imageWithContentsOfFile:初始化

        UIImage *image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"1.png" ofType:nil]];

        UIImageView *imageView = [[UIImageView alloc]init];

        imageView.frame = CGRectMake(50, 50, 275, 275);

        imageView.image = image;

        imageView.backgroundColor = [UIColor yellowColor];

        [self.view addSubview:imageView];

     

        2,使用initWithContentsOfFile:初始化

        UIImage *image1 = [[UIImage alloc]initWithContentsOfFile:[NSString stringWithFormat:@"%@/1.png",[[NSBundle mainBundle] resourcePath]]] ;

        UIImageView *imageView1 = [[UIImageView alloc]init];

        imageView1.frame = CGRectMake(50, 350, 275, 275);

        imageView1.image = image1;

        imageView1.backgroundColor = [UIColor yellowColor];

        [self.view addSubview:imageView1];

        使用这两种方式初始化 都可以成功运行出来 下图是运行效果的一个截图

        3,使用imageNamed:初始化

        UIImage *image2 = [UIImage imageNamed:@"1.png"];

        UIImageView *imageView2 = [[UIImageView alloc]init];

        imageView2.frame = CGRectMake(50, 350, 275, 275);

        imageView2.image = image2;

        imageView2.backgroundColor = [UIColor yellowColor];

        [self.view addSubview:imageView2];

    我主要想讲一下imageNamed:和前两种分别的使用情况:

    当一些图片占十几KB而已并且常用的时候,建议使用imageNamed:

    imageNamed:这个方法会将图片缓存到内存中 ,使用图片时会去寻找缓存,如果找不到才去NSBundle中找,找到后缓存,返回对象。找不到返回nil 

    但是有个弊端:程序结束的时候,这个图片才被释放掉,所以占用的内存很多。

    前两种是真接找路径中的图片,找不到返回nil.若使用的图片是高清大图不常用的时候,建议使用 imageWithContentsOfFile:或者initWithContentsOfFile:

    需要的时候 再加载。

     

    使用图片时一般会按照载体也就是UIImageView的大小进行拉伸,要使用原图大小的图片,可以在宽/高设置为image的实际宽高,也就是image.size.width/image.size.height。

    UIImage *image2 = [UIImage imageNamed:@"1.png"];

        UIImageView *imageView2 = [[UIImageView alloc]init];

        imageView2.frame = CGRectMake(50, 350, image2.size.width, image2.size.height);

        imageView2.image = image2;

        imageView2.backgroundColor = [UIColor yellowColor];

        [self.view addSubview:imageView2];

      

        上面这种情况有一个没有解决的问题, 我们以及能使用原图大小的图片,但是载体的大小也只能是原图的大小,这样使用起来比较受限。使用内容模式能解决这类问题:

        下面讲讲内容模式

        // 内容模式

        /*

         UIViewContentModeScaleToFill  拉伸充满整个载体

         UIViewContentModeScaleAspectFit     拉伸但不改变比例,充满最小的一边

         UIViewContentModeScaleAspectFill 拉伸但不改变比例,充满最大的一边

         UIViewContentModeRedraw,

         UIViewContentModeCenter

         */

        我们不需要UIImageView的frame中将宽/高设置为image的实际宽高,只要设置imageView的内容模式:

        imageView.contentMode = UIViewContentModeCenter;

    下面的第一张是设置了imageView的内容模式,可以见到使用了原图而且imageView的大小可以随意设置。第二张是将imageView宽/高设置为image的实际宽高,才达到使用原图的目的。

     

    总结:当你使用图片的时候,有两点需要考虑一下,第一点:你的图片是否高清?是否常用?第二点:你是不是不希望你的图片被拉伸或者被拉伸比例?

    当你考虑到这两点的时候,我的这篇文章可能会对你有点小帮助。 

     

     

     

     

     

     

     

  • 相关阅读:
    OData – the best way to REST–实例讲解ASP.NET WebAPI OData (V4) Service & Client
    Oracle 免费的数据库--Database 快捷版 11g 安装使用与"SOD框架"对Oracle的CodeFirst支持
    PDF.NET 开发框架之 SOD框架 Ver 5.2 正式版开源源码发布
    变态的儿童国学教育与孔子真正的教育之道
    .net字符串数组查找方式效率比较
    Oracle根据字段值找到表名和列名
    Oracle卸载后手工删除内容
    Oracle服务启动顺序导致ORA-12514
    mysql由于权限问题看不到用户数据库
    MySql无法远程登录以及IP被锁解决办法
  • 原文地址:https://www.cnblogs.com/cityingma/p/4837047.html
Copyright © 2020-2023  润新知