ios caanimation

ios - La terminación de CATransaction se llama inmediatamente



caanimation (4)

Estoy intentando ejecutar un bloque de finalización después de que mi CAAnimation haya terminado. Sin embargo, parece que se llama al bloque de animación antes de que se complete mi animación. La animación todavía sucede correctamente.

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

DropAndBounceAnimation es una CAKeyFrameAnimation on position.y, con una duración fija.


Aquí está la versión de Swift 3.0.1, Xcode 8 :

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


Debe configurar el bloque de animación antes de agregar la animación.

[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];

Esto debe activar el bloque de finalización después de la finalización de esa animación en la vista.


Intenta iniciar la animación de forma asincrónica:

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

porque puede interferir con el dibujo de vista si realiza alguna configuración de vista antes de llamar a la animación.


No estoy seguro de si esta es realmente la solución correcta, pero estableciendo el bloque de finalización antes de agregar la animación para la capa, el bloque de finalización se llama constantemente en el momento correcto.

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