2013-02-05 26 views
1

我正在開發一個涉及在屏幕上繪製小圖形(線條和路徑)的iOS項目。在小圖形項目中使用Quartz

我最初選擇使用Quartz而不是OpenGL,因爲我需要顯示一些基本的形狀,並且我需要每5秒更新一次,所以我認爲Quartz更好更容易。

我發現我不能簡單地在視圖中繪製,但我必須繼承一個UIView並在drawRect方法中繪製。

在我的項目中,用戶應該能夠捏和縮放圖形,所以我計劃添加一個pinchgesture到視圖,但我懷疑如何重新繪製捏之後的一切。是否必須清除所有內容並重新添加子視圖,以便drawRect觸發,還是有更好的方法來執行此操作?

非常感謝。

+0

不是一個可能的答案,但檢查這個http://blog.teamtreehouse.com/creating-a-fun-iphone-app-called-bearded-part-1 – Joseph

回答

1

當使用Quartz時,你在技術上不要子類化視圖並替換drawRect,但它可能是最佳實踐。當您想重新繪製窗口時,只需撥打[self setNeedsDisplay];(如果從子類別視圖中調用,或者如果從視圖控制器中調用[self.view setNeedsDisplay];)。這將導致您打電話給您的drawRect方法,它會爲您處理所有事情。

有關更多信息,請參閱setNeedsDisplay文檔。

+0

所以你的意思是,例如我改變我的繪圖變量爲新的值,然後觸發setNeedsDisplay,對不對? – GavynSykes

+0

@GavynSykes - 是的。查看http://stackoverflow.com/a/14203167/1271826中的第二個代碼示例,瞭解將手勢與「setNeedsDisplay」組合的示例。請注意,這是做一些與你略有不同的事情(這是動畫從手勢開始到手勢結束的一條線的繪製),但它說明了(a)手勢和Quartz的集成; (b)在touchesMoved和touchesEnded中調用'setNeedsDisplay'的正確時間;和(c)展示了你在視圖控制器中使用它或使用子類「UIView」的區別。 – Rob