Закрытие CATransaction немедленно вызывается
Я пытаюсь выполнить блок завершения после завершения моей CAAnimation. Однако кажется, что анимационный блок вызывается до завершения моей анимации. Анимация все равно происходит правильно.
[CATransaction begin];
[self.view.layer addAnimation:self.dropAndBounceAnimation forKey:@"appearance"];
[CATransaction setCompletionBlock:completionBlock];
[CATransaction commit];
DropAndBounceAnimation является CAKeyFrameAnimation на position.y с фиксированной продолжительностью.
Ответы
Ответ 1
Я не уверен, что это действительно исправление, но, установив блок завершения до, добавив анимацию для слоя, блок завершения последовательно вызывается в нужное время.
[CATransaction begin];
[CATransaction setCompletionBlock:completionBlock];
[self.view.layer addAnimation:self.dropAndBounceAnimation forKey:@"appearance"];
[CATransaction commit];
Ответ 2
Вам нужно установить блок завершения перед добавлением анимации.
[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];
Это должно вызвать блок завершения после завершения этой анимации в представлении.
Ответ 3
Вот версия Swift 3.0.1, Xcode 8:
CATransaction.begin()
CATransaction.setCompletionBlock({
print("Transaction completed")
})
print("Transaction started")
view.layer.add(dropAndBounceAnimation, forKey: "appearance")
CATransaction.commit()
Ответ 4
Попробуйте запустить анимацию асинхронно:
DispatchQueue.main.async {
self.startAnimation()
}
потому что это может помешать рисованию вида, если вы сделаете некоторые настройки вида перед вызовом анимации.