2010-05-10 51 views
6

我試圖製作一個小型的iPad工具,用於繪製簡單的幾何對象(矩形,圓角矩形,橢圓形,星形...)。 我的目標是製作一些非常接近Keynote(繪圖功能)的東西,即讓用戶添加一個矩形(例如),調整大小並移動它。我也希望用戶可以選擇多個對象並將它們一起移動。實現繪圖功能的最佳方式,如Keynote

我想過至少3點型動物的方式來做到這一點:

  • 擴展UIView的每個對象類型,矩形類,另一個爲橢圓,...利用自定義繪製方法。然後將此視圖添加爲全局視圖的子視圖。
  • 爲每個對象類型擴展CALayer,爲Rect擴展一個類,爲Ellipse擴展另一個類...使用自定義繪圖方法。然後將此圖層添加爲全局視圖圖層的子圖層。
  • 爲每個對象類型擴展NSObject,爲Rect創建一個類,爲Ellipse創建另一個類......只需一個繪圖方法,它將作爲參數獲取一個CGContext和一個Rect,並直接在其中繪製表單。這些方法將被全局視圖的繪製方法調用。

我知道,兩種第一種方法來檢測每個對象上的觸摸功能,以添加容易陰影,...但我恐怕他們有點太沉重?這就是爲什麼我想到最後的方式,這似乎是直截了當的。

哪種方式更有效?或者,也許我沒有想過另一種方式?

任何幫助將不勝感激;-)

感謝。

回答

1

我會使用UIKit類來完成您的繪圖,然後配置文件並從那裏優化您的代碼。

蘋果/ iPad的信息:link text

0

我的第一感覺是使第三的方式,但被說服,我已爲我的消息只是後,我做了一些測試,只用全球視野和超過200幾何形式(Rect,Rounded Rect和Ellipse),我只用touchMoved事件移動一半。我用方法1(Subclassing UIView)和方法3(Subclassing NSObject)做了這個測試,2的方式在我看來太嚴格了,根本沒有幫助我。 resuslt是,方式1似乎更有效率......當我將60個對象移到一起時,沒有任何滯後!此外,使用這種方法可能會幫助我,因爲使用視圖來了一些有趣的功能,如複雜路徑上的觸摸檢測(請參閱UIBezierPath),由UIView類處理的對象層次結構...

所以我會用這種方式回來這裏分享我的成果;-)

問候

0

這是更好地使用CGLayer對象。好處是:

  1. 它速度更快,內存效率更高。對於簡單的對象,添加視圖要昂貴得多並且視圖層次結構複雜化。對於複雜的對象,CGLayers上的緩存可以提高性能。

  2. 很容易將對象組合在一起。你只需要把所有東西放在一個新的層面上,瞧!幾乎沒有開銷。

  3. 使用CGLayer和其他Quartz對象爲您提供了更多的靈活性。

唯一的缺點是,你必須直接使用Quartz 2D。這並不難,但如果你以前沒有使用過,需要一些學習。

0

CAShapeLayer幾乎可以處理您的選項2.默認情況下,它可以實現矩形和圓角矩形(請參閱cornerRadius),或者您可以爲任意形狀提供一個路徑。對於你的選項1,你可以使用帶有UIView的CAShapeLayer而不是實現drawRect,它可能會更快。