实战00篇 CAlayer/链表

240 阅读2分钟
1. 如何实现ios中的通知,不用kvo

2. 一个按钮点击多次,请求服务器,如何做到每次点击都能拿到response

3. 将一个CAlayer添加到到UIView上移动,如何判断点击位置在calayer上

在使用CoreAnimation的动画的时候,是把创建的动画放到layer上,而简单的使用动画,
很多时候是使用[UIView animation...],那么后者其实本质是内部建了一个动画放到了layer上吗?
是的,动画的载体就是layer,这就是它们的基本关系。但为了更高效的动画,还有更多的细节。
如果你做过位移的动画,并且试着在动画的过程里去输出view的位置,你会惊讶的发现:
在动画开始后,view的frame就已经是结束位置的值了!按照常识理解,view的位置应该是随着时间不断变化的,
而这个理解上的错差正是理解动画内核的一个好的窗口。从上面的现象至少可以得出一点:
就是你眼睛看到的,跟系统里的数据不是一致的,动画可能是一个欺骗把戏。

Instead, a layer captures the content your app provides and caches it in a bitmap,
 which is sometimes referred to as the backing store. ... 
When a change triggers an animation, Core Animation passes the layer’s bitmap 
and state information to the graphics hardware, which does the work of rendering 
the bitmap using the new information. Manipulating the bitmap in hardware yields 
much faster animations than could be done in software.
这段话的含义是:layer的内容生成一个位图(bitmap),触发动画的时候,
是把这个动画和状态信息传递给图形硬件,图形硬件使用这两个数据就可以构造动画了。
处理位图对于图形硬件更快。模拟一下动画处理过程就是:一个很复杂的view的动画,
是把它的layer的内容合成一张图片,然后要旋转,
就是把这张图旋转一下显示出来。实际上图形系统在渲染的过程里,对于旋转、缩放、位移等,
只需要加一个矩阵就可以了(对应就是transform),对于图形系统而言这些工作就是最基本的操作,非常高效。
所以动画的呈现和view本身的的数据时分离的,也就出现了动画时看到的都是结束时的数据。






5.