UIImage主要是用来设置UIImageView中的image属性的。如果图片尺寸和UIImageView的尺寸正好一样。那么,恭喜您,直接放上去就ok了。
但是,如果两个尺寸不相匹配怎么办呢?答案很明显有两种:拉伸或者保持原来大小不变。
一、不拉伸图片
如果你不想拉伸图片,那么伴随着一个问题。这个Image应该放在哪里合适?
这时,UIImageView会用到从父类UIView继承过来的一个属性contentMode。
如果这样写:
imageView.contentMode = UIViewContentModeCenter;//假设imageView存在,并且已经设置过了一个尺寸较小的图片
这句代码执行后,可以看到图片会显示在imageView的中央。其它的枚举值效果,大家可以自己去尝试。
二、拉伸图片
如果拉伸图片,那么伴随的将是另外一个问题,该如果拉伸?
1>均匀拉伸
均匀拉伸分为两种:等比例拉伸或者非等比例拉伸
如果选择等比例拉伸,那么可能必然只能以一边外参照,另一边就无法考虑到。
这时,也会用到上面说的contentMode属性。
imageView.contentMode = UIViewContentModeScaleAspectFit;//假设imageView存在,并且已经设置过了一个尺寸较小的图片
imageView.contentMode = UIViewContentModeScaleAspectFill;//假设imageView存在,并且已经设置过了一个尺寸较小的图片
上面代码第一种,执行的效果是,水平方向和垂直方向等比例拉伸。当某一边达到最大效果时,停止拉伸,并显示出来。
下面代码,执行的效果是,水平方向和垂直方向等比例拉伸。当某一边达到最大效果时,如果另一边还没有达到最大效果,继续拉伸,并且已经达到最大效果的方向会继续拉伸,超过imageView的边界。
如果是非等比拉伸,那么就不需要考虑那么多问题了。
imageView.contentMode = UIViewContentModeScaleToFill;//假设imageView存在,并且已经设置过了一个尺寸较小的图片
这句代码会直接将图片拉伸到填充这个imageView。
2>非均匀拉伸
在这里只考虑一种情况。就是保持图片的边界不变,只拉伸中间的一部分。
如果是iOS5.0以前,可以有两个选择。不过第一种已经声明过时,不推荐使用。
[image stretchableImageWithLeftCapWith:7 topCapHeight:8];//假设image已经存在,并且其大小为17*31
[image resizableImageWithCapInsets:[UIEdgeInsetsMake(8, 7, 22, 9)]];//假设image已经存在,并且其大小为17*31
上面代码第一种,意思是说,如果水平方向需要拉伸,那么保持左边7个像素不变,保持右边(17 - 7 - 1)个像素不变,拉伸的是从第7个像素开始的一个像素长度;如果是垂直方向需要拉伸,那么保持上边8个像素不变,保持下边(31-8-1)个像素不变,拉伸的是从第8个像素开始的一个像素长度。
下面代码,所做的效果和上面的一样。