之前写过一篇博客,介绍CATransaction的使用:理解CATransaction。文中提到,当需要监听动画结束时,可以利用-[CATransaction setCompletionBlock:]
方法监听动画的结束,而不用修改接口参数。然而,利用这个方法监听动画结束,有一定的风险会导致 completionBlock 不被调用。
简单例子如下:
1 | [CATransaction begin]; |
一般情况下 completionBlock都会被调用。
但是当[self doAnimation]
中做了一个repeatCount=HUGE_VALF
的动画时,动画永远不会结束,因此, completionBlock 就永远不会被调用。
在同一个类中利用CATransaction
来监听动画结束问题不大,但是做动画的代码中还会调用外面的类的话,就需要小心了。