2012-06-26 19 views
0

對於一個特定的控制器類,我需要繪製一個網格(網格指的是每日計劃,每天更改,有時每個小時)。過了一段時間,在用戶採取行動之後,我需要用更新的時間表數據填充該網格,這是我在做原始網格時沒有的。如何在不同的時間繪製drawRect中的圖形對象?

我的問題是:因爲我不知道當時選定的日子viewDidLoad,這是否意味着我必須重新繪製整個網格,以及新的每日計劃數據? (這是我能想到的將drawRect中的所有內容都畫出來的唯一方法)或者我可以調用drawRect的以外的方法來繪製每日時間表?還是有另一種更好的方法來做到這一點?

+0

我通常使用tableviewCell來自定義TableViewCell來模擬網格,我發現它比自己繪製網格要簡單得多。 –

+0

另外,您可以嘗試設置[label setNeedsDisplay]來查看是否觸發僅修改修改過的標籤的重繪。 –

回答

2

您不指定這是iOS還是Mac,這可能會影響您對此做出的假設。但是通常情況下,一個視圖的drawRect方法應該至少重繪所提供矩形內的所有內容(線索在方法名稱中)。從廣義上講,這是管理這種繪圖的地方,當然你也可以將代碼分解成其他方法來清晰和組織。

除非你的網格非常密集,否則這次重繪不太可能會對性能產生顯着影響。未能在實際骯髒的地區重新繪製需要的內容將是一個更糟糕的情況。

+0

通過「將代碼分解爲其他方法」,你的意思是說,在drawRect中,我可以調用其他方法來繪製時間表網格和必須在不同時間在網格中繪製的各種數據? (希望有道理) – SpokaneDude

+1

當然,這只是代碼。唯一需要注意的是圖形上下文的設置是正確的,如果你直接從'drawRect'中調用它應該是這樣。不過,要小心從別處引用這些相同的方法。 – walkytalky

+0

太棒了!正是我在找什麼......它的工作原理! :D非常感謝你...... – SpokaneDude

0

這聽起來像你想從計劃數據的繪圖代碼中分離出網格的繪圖代碼。

最簡單的方法是爲您的計劃數據創建一個NSView的子類 - 然後您可以爲每一塊數據創建該對象的一個​​實例。您的網格視圖可以通過設置它們的框架來定位這些時間表數據對象,並且時間表數據對象可以自己繪製它們自己的drawRect:方法。

相關問題