2009-10-26 71 views
1

我正在實現一個UIView(UITableViewCell更準確)drawRect方法。
我的視圖具有透明背景,因此當視圖中的內容發生更改時,較舊的繪製版本仍保留在那裏。因此,如果在第一個drawRect上繪製一個「A」,然後在同一個點上繪製一個「B」,我會將它們繪製在彼此之上。Cocoa-Touch:實現drawRect時,如何重繪透明背景?

我該如何告訴框架重繪背景?
(我想這不會做,因爲並不總是需要的,但在這種情況下是很糟糕的)

我想我需要的是Win32的invalidateRect相當於,但是我去通UIViews成員和沒」找不到任何東西。

順便說一句,我試過setNeedsDisplay,它沒有幫助。

回答

5

我想我以前使用過CGContextClearRect(CGContextRef context, CGRect rect)

0

你應該設置clearsContextBeforeDrawing

+0

嘗試過,沒有工作 – Prody 2009-10-26 07:56:01

0

我不知道,因爲它是保留繪製自己的觀點,自己是否應該刪除在傳遞的矩形?

如果背景不透明會發生什麼?

+0

如果我的背景是任何不透明的顏色,它會被繪製,A被擦除,只有B被顯示。 – Prody 2009-10-26 08:39:40

-2

我不再重複使用單元格。

這對我很有用,因爲我的桌子上總是有20個細胞。我想這不是每個人的解決方案,但這是我打算去的方式。

與其讓框架創建並重用10個單元格,我在爲它們提取數據的同時創建了20個,之後在顯示時更順暢,因爲它們不需要每次重新定製。

0

您可能從Windows世界中發現您正在考慮錯誤的問題。也來自Windows世界,我自己也做了很多次。爲什麼你需要重寫drawRect?每當你這樣做,你都有責任去關心一切。是否有可能做你想要的另一種方式?你在drawRect中畫什麼?你可以直接添加子視圖或子圖層嗎?

順便說一下,你是否在drawRect覆蓋開始時調用[super drawRect:rect]?