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的实际宽高,才达到使用原图的目的。
总结:当你使用图片的时候,有两点需要考虑一下,第一点:你的图片是否高清?是否常用?第二点:你是不是不希望你的图片被拉伸或者被拉伸比例?
当你考虑到这两点的时候,我的这篇文章可能会对你有点小帮助。