完成块被多次调用,因为在您的情况下,您的动画被多次触发.发生的事情是iOS每次被告知时都会调用你的动画块,可能是在一个单独的线程中.然后,对于每个动画,它跟踪其完成,并在完成时调用关联的完成块.所以基本上,你会看到你的完成块多次触发,每次调用动画一次.请注意,与完成块关联的布尔值特定于该完成块,它不以任何方式引用不同的动画.
回顾一下,您所遇到的只是并发的影响.如果这不是您的预期行为,那么您需要相应地修改您的代码.如果您希望您的动画一次触发一个,您可以使用NSLock(NSConditionLock使用关联条件变量进行高级控制),或者,如果您愿意,可以直接使用互斥锁和Posix pthreads库来创建要执行的关键部分以互相排斥的方式.