CATransaction completion being called immediately CATransaction completion being called immediately ios ios

CATransaction completion being called immediately


I'm not sure if this really is the correct fix, but by setting the completion-block before adding the animation for the layer, the completion-block is consistently called at the correct time.

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


You need to set the completion block before adding the 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];

This must trigger the completion block after the completion of that animation on the view.


Here is Swift 3.0.1, Xcode 8 version:

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