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

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

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

时间: 2024-10-03 21:41:39

UIImage的几种初始化方式以及在UIImageView中内容模式的设置的相关文章

自制Javascript分页插件,支持AJAX加载和URL带参跳转两种初始化方式,可用于同一页面的多个分页和不同页面的调用

闲话部分 最近闲着实在无聊,就做了点小东西练练手,由于原来一直在用AspNetPager进行分页,而且也进行了深度的定制与原有系统整合的也不错,不过毕竟是用别人的,想着看自己能试着做出来不能,后台的分页插件已经有比较成熟的了,那就自己试着写一个前台分页吧. 话不多说,先上效果图: 优点与缺点 来说说优缺点吧,首先AspNetPager是后台分页控件,所以在向客户端回传HTML文档之前生成HTML阶段 就会把分页代码生成完毕,然后回传,而JS是前端代码,就是HTML文档在服务器组织完毕往客户端传送

Jquer的三种初始化方式

$(document).ready(function(){ alert(200); }); jQuery(function($){ alert(100); }); $(function(){ alert(300); }); Jquer的三种初始化方式

Java连载66-数组的两种初始化方式

一.数组 1.数组中存储元素的类型是统一的,每一个元素在内存中所占用的空间大小是相同的,知道数组的首元素的内存地址,要查找的元素只要知道下标,就可以快速的计算出偏移量,通过首元素内存地址加上偏移量,就可以快速计算出要查找元素的内存地址.通过内存地址快速定位该元素,所以数组查找元素的效率较高. 2.随机的对数组进行增删元素,当增加元素的时候,为了保证数组中元素在空间存储上是有序的,所以被添加元素位置后面的所有元素都要向后移动,删除元素也是,后面所有的元素要向前移动,所以数组的增删元素?效率很低.

数组 两种初始化方式及二维数组

数组: 静态数组  和  动态数组 1.写法: 定义:用来存储一组相同数据类型的元素 * * * * *   数组中存储的元素必须是相同的数据类型 数组的声明  初始化 Int[] a={1,2,3,4}; 数组的初始化: 静态初始化: //方式1 int[] a={'a',2,3,34,3,4,5,6,7,8,7,8,9,0,4,5,6,7,8};//声明的同时初始化 double[] a1={1.2f}; //方式2 int b[]={1,2,3,4}; //方式3: int[] c;  

UIImage的几种初始化方法的对比

1.imageNamed:方法 imageNamed:是UIImage的一个类方法,它做的事情比我们看到的要稍微多一些.它的加载流程如下: a. 系统回去检查系统缓存中是否存在该名字的图像,如果存在则直接返回. b. 如果系统缓存中不存在该名字的图像,则会先加载到缓存中,在返回该对象. 观察上面的操作我们发现系统会缓存我们使用imageNamed:方法加载的图像时候,系统会自动帮我们缓存.这种机制适合于那种频繁用到界面贴图累的加载,但如果我们需要短时间内频繁的加载一些一次性的图像的话,最好不要使

053_数组的三种初始化方式

一.默认初始化 数组也是引用类型中的其中一种.所以数组也是对象.数组中的元素相当于对象中的成员变量.其初始化规则和对象成员变量一致. 1.int或能自动转为int类型的(byte.short.int).long默认初始值都为:0 2.浮点数类型(单精度float和双精度double)默认初始值为:0.0 3.引用类型(数组.String.枚举等其它自定义类型)默认初始值为:null 二.静态初始化 除了用new关键字来产生数组以外,还可以直接在定义数组的同时就为数组元素分配空间并赋值.如: in

Java里数组的三种初始化方式

静态初始化 除了用new关键字来产生数组以外,还可以直接在定义数组的同时就为数组元素分配空间并赋值. // 静态初始化 int[] iArr = { 5, 2, 0 }; Hero[] heros = new Hero[] { new Hero("艾希","女"), new Hero("盖伦","男"), new Hero("挖掘机","未知") }; 动态初始化 数组定义与为数组元素分

JAVA学习笔记-数组的三种初始化方式

package Study; public class TestArray02 { public static void main(String[] args){ //声明 int[] a; int b[]; //创建数组对象 a = new int[4]; b = new int[5]; //初始化(对数组元素的初始化) //默认初始化:数组元素相当于对象的成员变量,默认值跟成员变量的规则一样.数字0,布尔false,char\u0000,引用:null: //动态初始化: for(int i

iOS 关于使用xib创建cell的两种初始化方式

[转]http://my.oschina.net/CgShare/blog/337406 方法一: 第一步: [self.collectionView registerNib:[UINib nibWithNibName:@"QGLShareBtnCell" bundle:nil] forCellWithReuseIdentifier:@"QGLShareBtnCell”]; 第二步: QGLShareBtnCell *cell = [collectionView dequeu