2010-05-10 53 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,它可能会更快。