2009-02-28 47 views

回答

3

您基本上需要剪切已經進行更改的「矩形」部分,只有這部分將被重新繪製。

- (void)setNeedsDisplayInRect:(CGRect)invalidRect 
+2

問題不在於rect沒有重繪,而是在重新發布drawRect時,它會清除所有先前繪製的路徑。這似乎是Core Graphic繪圖程序的默認行爲。 – Boon 2009-02-28 18:46:53

0

我很肯定這是沒有辦法的;這就是UIView設計的工作原理。如果要求,您的自定義視圖應該能夠隨時抽取自己的任何部分。這部分是因爲視圖可以做的不僅僅是出現在屏幕上。例如在桌面上可以打印,甚至在iPhone上,您可能希望將視圖的內容捕獲到位圖。

1

我現在正在處理這個問題。問題是在UIView上有一個名爲「clearsContextBeforeDrawing」的屬性,根據文檔應該解決這個問題,但是在我的經驗中,它不起作用。

我認爲最終解決這個問題的方法是分配一個屏幕外緩衝區,並在那裏完成所有的繪圖,然後將其繪製到drawRect方法的UIView中。

+1

是的,這也引發了其他問題:一個是iPhone/iPad只支持RGBA而不支持RGB,所以更新屏幕需要RGBA-> RGB轉換(這佔用99%的時間)。另外,它仍然會清除UIView徒然,絕對沒有目的。如果有人知道解決這些問題的方法,請ping! – gilm 2010-08-15 12:25:20