web-dev-qa-db-fra.com

La fin de la transaction étant appelée immédiatement

J'essaie d'exécuter un bloc d'achèvement une fois que CAAnimation est terminé. Cependant, il semble que le bloc d'animation soit appelé avant la fin de mon animation. L'animation se passe quand même correctement.

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

DropAndBounceAnimation est un CAKeyFrameAnimation sur position.y, avec une durée fixe.

38
Javache

Je ne sais pas si c'est vraiment le correctif correct, mais en définissant le completion-block before en ajoutant l'animation pour la couche, le completion-block est appelé de manière cohérente au bon moment.

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

Vous devez définir le bloc d'animation avant d'ajouter l'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];

Cela doit déclencher le bloc d'achèvement après l'achèvement de cette animation sur la vue.

11
CoderSaru

Voici 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()
2
Vadim Bulavin

Essayez de démarrer l'animation de manière asynchrone:

DispatchQueue.main.async {
    self.startAnimation()
}

car cela peut interférer avec le dessin de vue si vous configurez les vues avant d'appeler l'animation 

0
mixel