2012-02-13 34 views
0

需要輸入我有使用哪一個可以繪製基本形狀像矩形,蝕,圓,文本等 此應用我還允許自由形式示圖,它被存儲爲組點在畫布上。iOS裝置:在顯影效率(性能明智)繪圖應用

另外,用戶可以調整大小並且通過在當選擇了對象出現在選擇手柄操作左右移動這些對象。 另外,用戶應該能夠縮放和平移畫布。

我需要就如何有效地實現這一功能繪製一些投入。 我已經記住以下幾點 -

  1. 使用的UIView的InvalidateRect和drawRect中

有主畫布併爲每個插入的對象一個UIView - 無效把對應的正確,而且重繪所有相交的對象rect在UIView的drawRect函數中。

  1. 有一個UIView和使用CALayer? 每個人都繼續提到CALayer,我對此沒有太多的想法,在我冒險之前,我想快速瞭解這條路線是否值得。 一樣,https://developer.apple.com/library/ios/#qa/qa1708/_index.html

  2. 有一個UIImageView作爲畫布,畫出每個物體的時候,我們做這個 I)繪製對象到屏幕外CGContext上,基本上用UIGraphicsBeginImageContext創建一個新的CGContext上,繪製形狀,提取圖像在這個CG上下文中,並將其用作UIImageView的image屬性的源,但是在這裏如何僅使UIImageView的一部分失效,以便只刷新該區域。

您能否提出建議什麼是最佳方法? 有沒有其他有效的方法來完成這件事?

謝謝。

回答

1

使用UIImage對於渲染多個對象更有效。但是在移動和修改單個對象時使用CALayer更加高效,因爲您不必修改其他對象。所以我認爲最好的方法是使用UIImage進行常規繪圖,並使用CALayer來修改正在修改的形狀。換句話說:

  • 使用的CALayer繪製添加或修改的形狀,但不畫它的UIImage的
  • 使用一個UIImage繪製其他形狀

但OpenGL的仍然是最有效的解決方案,但如果你沒有太多的物體可以繪製,就不用擔心。

+0

感謝您的信息。當你說「使用CALayer繪製被添加或修改的形狀」時,你的意思是爲每個對象添加一個圖層?或者有一個單層作爲所有對象的畫布?如果它晚,讓我說我需要移動一個對象,我需要清除當前邊界,然後重新繪製對象在新的邊界rt?我假設這是一種有效的方法。另外,我有一個背景畫布,讓我們說一組水平線,這不會改變,所以這將是它自己的rt層? iOS會照顧將這些圖層堆砌成最終視圖rt? – naiveCoder 2012-02-14 12:07:04

+1

假設您有一個包含所有形狀的數組。在一個圖層中繪製背景。現在在一個圖層oldShapes中繪製除了被修改的形狀之外的所有形狀。在單獨的圖層currentShape中繪製要添加或修改的形狀。這樣,您只需重繪幾次oldShapes圖層即可。而當用戶修改形狀時,只需處理該形狀。例如,如果要移動形狀,只需簡單地移動圖層或在新座標中重新繪製形狀。 – sch 2012-02-14 12:21:06

+0

只是想添加更多的信息,畫布超出了屏幕尺寸,畫布的高度可以說是3000磅,所以我需要提供一種平移和縮放/進出畫布的方法。 – naiveCoder 2012-02-14 12:34:34

1

如果要繪製多邊形,則必須使用Quartz框架,並使用基於CALayer的繪圖方法。您將哪個視圖放入CALayersUIImageViewUIView並不重要。我會說UIView因爲你不需要UIImageView的繪畫屬性或方法。