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的实际宽高,才达到使用原图的目的。

 

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

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

 

 

 

 

 

 

 

原文地址:https://www.cnblogs.com/cityingma/p/4837047.html