Swift CATTransaction完成块被调用两次

Swift CATTransaction完成块被调用两次,swift,animation,completionhandler,catransaction,Swift,Animation,Completionhandler,Catransaction,我正在尝试使用CATTransaction进行CABasicAnimation,这样我就可以拥有一个完成处理程序。它工作正常,但是当我退出视图控制器并返回时,完成块会被调用两次:一次是在动画开始时,一次是在动画结束时。我只想把它放在最后 奇怪的是,当我退出它,第二次回来时,完成被称为3次,以此类推 func animate() { CATransaction.begin() Animation.toValue = 0 A

我正在尝试使用CATTransaction进行CABasicAnimation,这样我就可以拥有一个完成处理程序。它工作正常,但是当我退出视图控制器并返回时,完成块会被调用两次:一次是在动画开始时,一次是在动画结束时。我只想把它放在最后

奇怪的是,当我退出它,第二次回来时,完成被称为3次,以此类推

func animate() {

            CATransaction.begin()

            Animation.toValue = 0
            Animation.duration = CFTimeInterval(timerChoosenTime)
            Animation.fillMode = CAMediaTimingFillMode.forwards
            Animation.isRemovedOnCompletion = false

            CATransaction.setCompletionBlock({
                //Some cool stuff
            })

            object.add(Animation, forKey: "Animation")

            CATransaction.commit()
}

我认为该程序创建了多个CATTransaction。解决这个问题的办法是取消交易,但我在网上什么也没找到。不过,我不确定。请帮帮我…

如果删除begin和commit调用会怎么样?同样的情况也会发生,它在动画开始时运行一次,在动画结束时运行一次。我拥有的唯一与之相关的代码是CATransaction.setCompletionBlock.Show足够的上下文来重现。函数是如何调用的?辞职回来意味着什么?尝试演示问题。当我单击屏幕时,该函数被调用。退出并返回是一个转到另一个视图控制器的序列。动画是一个计时器,在完成时发出声音。要复制,您必须使动画运行一次(然后它工作正常),使用segue并使用“back”(返回)按钮返回,再次运行动画,在动画开始和结束时播放声音(希望清楚),尝试想象没有其他人有此问题。因此,除了你,没有人知道如何解决这个问题。除非你告诉我们怎么做,否则我们帮不了你。你能发布一个小的演示项目吗?如果你删除begin和commit调用呢?同样的事情也会发生,它在动画开始时运行一次,在动画结束时运行一次。我拥有的唯一与之相关的代码是CATransaction.setCompletionBlock.Show足够的上下文来重现。函数是如何调用的?辞职回来意味着什么?尝试演示问题。当我单击屏幕时,该函数被调用。退出并返回是一个转到另一个视图控制器的序列。动画是一个计时器,在完成时发出声音。要复制,您必须使动画运行一次(然后它工作正常),使用segue并使用“back”(返回)按钮返回,再次运行动画,在动画开始和结束时播放声音(希望清楚),尝试想象没有其他人有此问题。因此,除了你,没有人知道如何解决这个问题。除非你告诉我们怎么做,否则我们帮不了你。你能发布一个小的演示项目吗?