我正在尝试制作一个小工具来绘制简单的几何对象(矩形,圆角矩形,椭圆形,星形......)。 我的目标是制作一些非常接近Keynote(绘图功能)的东西,即让用户添加一个rect(例如),调整它并移动它。我也想要用户可以选择多个对象并将它们一起移动。
我已经考虑过至少3种不同的方法:
我知道前两种方法都带有检测每个物体触摸的功能,可以轻松添加阴影,但是我担心它们有点太重了?这就是为什么我想到了最后一种方式,它似乎是直截了当的。
哪种方式会更有效率???或者也许我没有想到另一种方式?
任何帮助将不胜感激; - )
感谢。
答案 0 :(得分:1)
我会使用UIKit类来绘制图形,然后从那里分析和优化代码。
Apple / iPad信息:link text
答案 1 :(得分:0)
我的第一感觉是制作第三种方式,但是要确信,就在我发布消息之后,我做了一些只有全局视图和超过200种几何形式(矩形,圆角矩形和椭圆形)的测试它和我只用touchMoved事件移动了一半。我用方式1(Subclassing UIView)和方式3(Subclassing NSObject)进行了这个测试,2对我来说似乎过于严格,并且根本没有帮助我。 重新解决方案是1的方式似乎更有效...当我将60个物体移动到一起时没有延迟!而且使用这种方式可能对我有帮助,因为使用视图会出现一些有趣的函数,比如复杂路径上的触摸检测(参见UIBezierPath),UIView classe处理的对象层次结构......
所以我会用这种方式回到这里分享我的结果; - )
此致
答案 2 :(得分:0)
最好使用CGLayer对象。好处是:
速度更快,内存效率更高。对于简单对象,添加视图要昂贵得多,并使视图层次结构复杂化。对于复杂的对象,在CGLayers上进行的缓存可以提高性能。
将对象组合在一起很容易。你把所有东西放在一个新的层中,瞧!几乎没有开销。
使用CGLayer和其他Quartz对象可以提供更大的灵活性。
唯一的缺点是您必须直接使用Quartz 2D。这并不困难,但如果您以前没有使用它,需要一些学习。
答案 3 :(得分:0)
CAShapeLayer几乎处理你的选项2.它默认使用rect和圆角rect(参见cornerRadius),或者你可以给它任意形状的路径。对于您的选项1,您可以使用带有UIView的CAShapeLayer而不是实现drawRect,它可能更快。