我想创建一个图表应用程序,我可以创建一些形状。每个形状都可以在画布中移动。实施它的最佳方法是什么?现在我知道只有两种方式:
- 仅使用 UIView,在此 UIView 中绘制所有形状。当触摸事件到达时,重绘所有内容。
- 为每个Shape创建一个UIView,每个UIView可以独立响应UIEvent
有没有其他好办法?第一个太复杂了。第二个似乎表现不佳?
两者都行,但各有利弊。具体来说:
UIView
:这种方法需要您CALayer
为每个形状创建一个,然后在移动形状时进行自己的点击测试和手指拖动。如果您有许多形状(确保使用索引查找来进行命中测试而不是 O(N) 搜索),这种方法将执行得更好,因为CALayer
s 是轻量级的。
UIView
通过单次调用在其当前位置绘制形状的方法drawRect:
。这将表现得非常糟糕,尤其是当您在拖动过程中移动形状时,并且正如您所指出的那样,实现起来非常复杂UIView
每个形状一个:这种方法很容易编程,因为您不必进行命中测试并将触摸发送到被触摸的形状。如果您有几个形状(根据我的经验,<30),这种方法将表现良好。如果您有大量形状,您就会开始看到帧速率问题。