2012-12-12 179 views
2

我試圖伸展用下面的代碼一個UIImage:伸展看起來像在此之前爲什麼UIImage不能正確拉伸?

UIImage *stretchyImage = [[UIImage imageNamed:@"[email protected]"] stretchableImageWithLeftCapWidth:10.0 topCapHeight:0.0]; 
UIImageView *newTag = [[UIImageView alloc] initWithImage:stretchyImage]; 

的圖像:

enter image description here

,後,看起來是這樣的:

enter image description here

拉伸爲什麼沒有正常工作?角落都變得像素化,看起來很舒展,實際上只有中間部分應該拉伸。 FYI:我在iOS 6

+0

你在文件名中包含@ 2x的任何原因?您不需要此設備,如果設備是視網膜,則會選擇正確的圖像。 –

+0

不是真的 - 我會刪除:) –

+0

@PixelBitAppsLtd請同時移除'xcode'標籤。 – 2012-12-12 20:45:04

回答

3

運行這個程序,爲什麼您的實現不工作是因爲你給stretchableImageWithLeftCapWidth的價值觀:topCapHeight:方法。

首先,stretchableImageWithLeftCapWidth:topCapHeight:與iOS 6.新的API棄用是resizableImageWithCapInsets:

的圖像在頂部,底部和右側非伸縮性部件。你告訴API的是「從左側取-10,根據我給你的尺寸拉伸其餘部分」。

由於您在右側有一個不可重複的自定義形狀,因此在高度爲之間的寬度,我們應該將該部分作爲一個整體。

所以頂帽寬度應該是圖像的高度(保留右側的東西的形狀),左帽寬度應該是〜20像素(圓角矩形角),底帽可以是0 ,因爲頂帽是整個圖像的高度,最後右邊的帽子應該是右邊的自定義橙色形狀的寬度(我認爲這是約40像素)。

你可以玩上限值並取得更好的結果。

UIImage *image = [UIImage imageNamed:@"Tag"]; 
UIImage *resizableImage = [image resizableImageWithCapInsets:UIEdgeInsetsMake(image.size.height, 20, 0, 40)]; 

應該這樣做。 另外,-imageNamed在您擺脫文件擴展名& @ 2x時可以正常工作。

+0

該mehtod顯然是更好的選擇,因爲steatchable ...是depricated。但是你確定你的例子中給出的值?在這種情況下,我認爲這不會起作用。特別是頂部和底部的值。 –

+0

我想它的工作 - OP OP消息我。 –