在做項目的過程中,經常要用到各種尺寸的圖片。有的圖片則是長度不同,但是他們的某些區域是相同的。那有沒有什麼方法可以不用美工來切好多張圖,用一張就可以實現呢?
這樣既可以減輕美工工作量,又可以減少包得大小。 答案就是用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)
這樣就顯示正常了。