您的位置:首页 > 移动开发 > Swift

iOS编程——Swift使用resizableImageWithCapInsets来拉伸图片

2015-08-05 11:30 711 查看
在做项目的过程中,经常要用到各种尺寸的图片。有的图片则是长度不同,但是他们的某些区域是相同的。那有没有什么方法可以不用美工来切好多张图,用一张就可以实现呢?

这样既可以减轻美工工作量,又可以减少包得大小。 答案就是用resizableImageWithCapInsets。声明如下:

func resizableImageWithCapInsets(capInsets: UIEdgeInsets, resizingMode: UIImageResizingMode) -> UIImage // the interior is resized according to the resizingMode


其中使用capInsets:UIEdgeInsets 可以圈定一个矩形,这个图片矩形内的区域会拉伸变形,而这个矩形区域外的部分则会保持原样。

resizingMode:包括两种模式:

1)Title 通过重复显示UIEdgeInsets指定的矩形区域来填充图片

2) Stretch 通过拉伸UIEdgeInsets指定的矩形区域来填充图片

enum UIImageResizingMode : Int {

case Tile
case Stretch
}


这里我们仅说iOS 6.0以后(现在都已经8.0多了,兼容iOS6以后就相当可以了)

我们先添加一张图片,其最初大小为(100, 30),假设适配的iPhone 6

//default size (100, 30)
let imageView = UIImageView(frame: CGRectMake(40, 40, 100, 30))
let image = UIImage(named: "test")
imageView.image = image
view.addSubview(imageView)


显示原来大小:



现在比如要适配 Plus,要拉伸这个图,尺寸变为(300, 30)

let imageView = UIImageView(frame: CGRectMake(40, 40, 300, 30))
imageView.image = image
view.addSubview(imageView)


显示的很难看了:



我们把左边10个像素和右边的40个像素给保持原样,中间的蓝色区域来进行拉伸

let imageView = UIImageView(frame: CGRectMake(40, 40, 300, 30))
let image = UIImage(named: "test")?.resizableImageWithCapInsets(UIEdgeInsetsMake(0, 10, 0, 40), resizingMode: UIImageResizingMode.Stretch)
imageView.image = image
view.addSubview(imageView)




这样就显示正常了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: