啊,开始填坑。。。
主要是想说CALayer的模型层(modelLayer)和展示层(presentationLayer)。
当我们使用CALayer去做一些动画效果时,你可能会发现你点击正在动画的图层触发不了它对应的方法,但是这个图层却是真真切切地在动,这个就和CALayer的模型层和展示层有关。
模型层M中保存着需要绘制的内容和属性,展示层P会在下次绘制时“询问”M如何绘制,而P绘制的过程(包括产生动画效果)是我们看到的现象。
简单地说,你看到的动画时M指挥P完成的。
那么我们为什么获得不了点击事件呢?
我们知道UIView是负责用户交互的,Layer本身不具备用户交互事件(你对View显示上的操作其实最终操作的是Layer)。Layer产生的动画,例如fromValue toValue确确实实是Layer在动,但在动画过程中M并没有变(你可以当做View的原始位置没有变,动的是Layer),所以相应点击事件的依旧是原来的位置。(而且在动画的过程中,一个CAAnimation加在了Layer上,此时的P绘制时会去询问A,动画完成后A从Layer移除掉,P才会向M询问怎么绘制)。
网友评论