CATransaction完成被立即调用

我试图在我的CAAnimation完成后执行完成块。 不过,看起来我的animation完成之前就调用了animation块。 animation仍然正确发生。

[CATransaction begin]; [self.view.layer addAnimation:self.dropAndBounceAnimation forKey:@"appearance"]; [CATransaction setCompletionBlock:completionBlock]; [CATransaction commit]; 

dropAndBounceAnimation是position.y上的CAKeyFrameAnimation,具有固定的持续时间。

我不确定这是否是正确的修复方法,但是通过为图层添加animation之前设置完成块可以在正确的时间始终调用完成块。

 [CATransaction begin]; [CATransaction setCompletionBlock:completionBlock]; [self.view.layer addAnimation:self.dropAndBounceAnimation forKey:@"appearance"]; [CATransaction commit]; 

您需要在添加animation之前设置animation块。

 [CATransaction begin]; [CATransaction setValue:[NSNumber numberWithFloat: 1.0f] forKey:kCATransactionAnimationDuration]; [CATransaction setCompletionBlock:^{ // ... whatever you want to do when the animation is complete }]; [self.googleMapsView animateToCameraPosition:[GMSCameraPosition cameraWithLatitude:LATITUDE longitude:LONGITUDE zoom:ZOOM]]; [CATransaction commit]; 

这必须在视图上完成该animation之后触发完成块。 希望能帮助到你。 竖起大拇指 ;)

这里是Swift 3.0.1,Xcode 8版本:

 CATransaction.begin() CATransaction.setCompletionBlock({ print("Transaction completed") }) print("Transaction started") view.layer.add(dropAndBounceAnimation, forKey: "appearance") CATransaction.commit()