我想在Quartz
的帮助下实现绘图类。
我希望能够保存在不同图层上绘制的部分内容。我希望这些图层可以检索,因此我可以在命令中删除/隐藏/显示图层。
我可以将多个CGLayerRef
保存为我班级的NSMutableArray
属性,然后才能检索它们吗?如果是的话,你能指点我一个例子。
如果上面的“架构”中存在任何缺陷,请指出可以帮助我完成图形分层控制的替代解决方案。
谢谢。
答案 0 :(得分:1)
您创建的CALayers当然可以存储在NSMutableArray中,您可以稍后使用它们,通常是通过设置动画属性或让它们自己重绘。
通常您在该视图中创建自定义UIView,创建和管理图层。这些图层是该视图的成员变量,或者您将它们存储在数组中。随着应用程序中发生的事情,您的视图会相应地为图层设置动画。通常你想对触摸事件做出反应(你也在那个特定的视图中实现 - touchesBegan / Moved ......)并为图层设置动画。
只要你调用[layer setNeedsDisplay]
,或者它的边界(大小)被更改(好吧,如果needsDisplayOnBoundsChange
为真),CALayer会自行绘制内容并缓存内容。实际上,在我所做的所有应用程序中,这种重绘很少发生 - 只有在数据发生更改且图层需要重绘时才会发生。动画图层,变换它们的大小,旋转,更改位置 - 图层在任何这些期间都不会重新绘制。隐藏,显示,改变透明度 - 不需要重绘。
您正在谈论的“绘图类” - 您实际上只有两个选项 - 要么扩展CALayer
并覆盖drawInContext:
,要么创建基本CALayer
,设置其委托,在那里你画了drawLayer:inContext:
。我个人更喜欢创建代表。