我有一个iPad应用程序,可以绘制描图纸:半透明的表面,一面有标记。在应用程序中,用户可以“折叠”纸张以排列标记。
初始原型只是自定义视图中的drawRect覆盖,使用低级CGxxx调用来绘制,我只是手动处理绘制顺序:对于“右侧向上”部分,我首先绘制纸张,然后在其上面画出标记,对于折叠的部分,我首先绘制标记,然后是半透明的“纸”。这很好用,但是水平很低。我想更好地利用iOS。
由于Core Animation有3D变换,我希望3D旋转(翻转纸张)也会自动改变CALayers的绘制顺序(纸张是半透明层,标记是子层。唉,那不是'发生...在动画之后,绘图顺序与之前相同。
问题:
1)有没有办法像我希望的那样自动处理绘图顺序?我怀疑答案是肯定的,但是想问那些比我知道得多的人。
2)什么技术适合这种绘图?核心动画? CGLayers?只是坚持熟悉的低级别电话?我有点失落。
仅供参考,绘制折叠的纸张需要进行大量的转换和裁剪。程序是:剪辑到底部位,绘制纸张(图像)然后标记(路径),然后剪切到顶部位,在折叠线上进行反射变换,然后绘制标记然后纸张。再次,它运行良好,但代码是浩繁的(如果直截了当)。还有更好的方法吗?
感谢您的任何意见,
戴夫约翰逊答案 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
属性。)