自动更改CALayers的绘图顺序......可能吗?

时间:2010-12-27 19:18:45

标签: ios calayer

我有一个iPad应用程序,可以绘制描图纸:半透明的表面,一面有标记。在应用程序中,用户可以“折叠”纸张以排列标记。

初始原型只是自定义视图中的drawRect覆盖,使用低级CGxxx调用来绘制,我只是手动处理绘制顺序:对于“右侧向上”部分,我首先绘制纸张,然后在其上面画出标记,对于折叠的部分,我首先绘制标记,然后是半透明的“纸”。这很好用,但是水平很低。我想更好地利用iOS。

由于Core Animation有3D变换,我希望3D旋转(翻转纸张)也会自动改变CALayers的绘制顺序(纸张是半透明层,标记是子层。唉,那不是'发生...在动画之后,绘图顺序与之前相同。

问题:

1)有没有办法像我希望的那样自动处理绘图顺序?我怀疑答案是肯定的,但是想问那些比我知道得多的人。

2)什么技术适合这种绘图?核心动画? CGLayers?只是坚持熟悉的低级别电话?我有点失落。

仅供参考,绘制折叠的纸张需要进行大量的转换和裁剪。程序是:剪辑到底部位,绘制纸张(图像)然后标记(路径),然后剪切到顶部位,在折叠线上进行反射变换,然后绘制标记然后纸张。再次,它运行良好,但代码是浩繁的(如果直截了当)。还有更好的方法吗?

感谢您的任何意见,

戴夫约翰逊

1 个答案:

答案 0 :(得分:3)

尽管Core Animation具有3D变换功能,但在合成图层时仍然非常大。您可以做的是修改图层z顺序(zPosition的{​​{1}}属性),以给出半透明纸“在”前面或“下面”的标记印象。

为此,您需要在两个单独的CALayer上有纸和标记,据我了解您已经拥有。但请注意,子图层将在其父图层上呈现...因此,不要将“标记”图层作为“纸张”图层的子图层,而是需要将它们设为兄弟 z-order生效,例如通过使它们成为公共父层的子层:

CALayer

现在要在纸张下面显示标记,只需按z顺序重新排列它们即可。 (为了同时对两个属性应用转换,您可能希望分配容器图层的- (invisible) container layer - marks layer (zPosition 2) - paper layer (zPosition 1) 属性,而不是修改其各自的sublayerTransform属性。)