iOS編程——Swift使用resizableImageWithCapInsets來拉伸圖片

在做項目的過程中,經常要用到各種尺寸的圖片。有的圖片則是長度不同,但是他們的某些區域是相同的。那有沒有什麼方法可以不用美工來切好多張圖,用一張就可以實現呢?

這樣既可以減輕美工工作量,又可以減少包得大小。 答案就是用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)


這樣就顯示正常了。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章