2010-10-23 52 views
0

我想在Quartz的帮助下实现绘图类。 我希望能够保存在单独图层上绘制的部分。我希望这些图层是可检索的,所以我可以根据命令删除/隐藏/显示图层。绘图类允许图层控制

我可以保存多个CGLayerRef作为我班的NSMutableArray属性,然后能够检索它们吗?如果是的话,你能否指点我一个例子。

如果上述“体系结构”中存在任何缺陷,请指出可以帮助我完成对图的分层控制的替代解决方案。

谢谢。

回答

1

您创建的CALayers当然可以存储在NSMutableArray中,您可以稍后使用它们,通常通过动画化它们的属性或要求它们自己重绘。

通常你创建一个自定义的UIView,在该视图中创建和管理图层。这些图层可以是该视图的成员变量,也可以将它们存储在数组中。当事情发生在您的应用程序中时,您的视图会相应地为这些图层生成动画。通常你想对触摸事件作出反应(你也在特定的视图中执行 - touchesBegan/Moved ...)并为这些图层设置动画。

只要您拨打[layer setNeedsDisplay],CALayer自行缓存内容,或者更改其边界(大小)(如果needsDisplayOnBoundsChange为真)。实际上,在我所做的所有应用程序中,这种重绘很少发生 - 只有在数据发生变化并且图层需要重绘的情况下。动画层,转换它们的大小,旋转,改变位置 - 在任何这些层都不会重绘。隐藏,显示,更改透明度 - 不需要重绘。

那个“绘画课”你说的是 - 你其实只有两种选择 - 要么你延长CALayer并覆盖drawInContext:,或创建基本CALayer,设置它的委托,有你在drawLayer:inContext:画。我个人更喜欢创建代表。

+0

我不明白最后一部分,我不明白为什么我需要修改CALayer类的行为,我只是尝试将我的图层堆叠到一个数组中,我认为这对我来说已经足够了。 – Interfector 2010-10-23 10:10:59

+0

我想我最初误解了你的问题,认为你想以某种方式存储在图层中绘制的内容,以便稍后可以检索它。因此,我继续讨论如何缓存它们的内容时不需要这些内容。如果你只想知道你是否可以将图层实例存储到一个数组中 - 当然,它只是一个对象,如果你想在未来引用它,你必须将它存储在某个地方,成员变量或数组中。 – Michal 2010-10-23 12:06:56