2012-05-05 33 views
2

我想創建我自己的UIImage的子類,這將允許我創建一個可實現/可伸展的圖像,每個邊上都帶有頂蓋。UIImage的子類

iOS 5的resizableImage不適合我的需求,因爲它不允許我拉伸中間部分,現在不推薦使用stretchableImage,因爲它允許我只重複一個像素,而我可能想重複某種梯度。

到目前爲止,一切正常,我在-drawInRect:實施我自己的繪圖代碼,它的行爲如預期。
但是,當將我的自定義子類實例指定爲UIImageView的圖像時,我的代碼中斷了。圖像會像普通的UIImage一樣呈現。 (比例在各個方向上沒有任何上限)

我想在所有的四個繪圖方法(drawInRectdrawAtPoint,既獨立加上blendMode:設置斷點,但他們似乎並沒有被調用。

是否有一個UIImageView內使用它時,沒有子UIImageView,太方法提供UIImage與自定義繪製代碼?

此外,我擔心的表現。動畫期間的默認拉伸圖像效果很好,但我不知道它是如何會當動畫大小屬性(寬度&高度)我的UIImageView。我的渲染代碼會被每幀調用嗎?

+2

爲什麼不直接編寫自己的UIView子類而不是使用UIImageView?你可以使用你的UIImage子類或甚至是CGImageRef。 – EricS

+0

我知道我可以這樣做,但是說我有一個很大的項目,有很多可拉伸的圖像,當它不再被支持時會斷開。我只是想改變這個調用,使其保持其餘代碼的可伸縮性。我不想用我自己的UIView來替換每一個UIImageView。 –

回答

2

Apple Documentation它清楚地表明你不能覆蓋-drawRect:UIImageView,所以子類UIImageView也將無法正常工作。你必須實現你自己的UIView類。

子類化UIImage既不會工作,我已經嘗試過,並沒有公開的方法被調用,甚至沒有配件方法CGImage。我認爲你需要重寫一些私有API來完成這項工作。

不要擔心調整大小,只會爲最終幀調用渲染代碼。 但是,在大多數情況下,性能比使用UIImageView差。 Apple對該類進行了優化,以便在GPU上運行。

+0

當我只渲染最後一幀時,動畫如何運行?假設我在左側和右側都有一個帽子,並且希望將視圖放大100px。中心部分應該調整大小,右邊的帽子移動到右邊。 '-drawRect:'只能調用一次嗎? –