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

来源:互联网 发布:mac版betterzip注册码 编辑:程序博客网 时间:2024/06/05 17:45

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

这样既可以减轻美工工作量,又可以减少包得大小。 答案就是用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)


这样就显示正常了。




0 0