CAAnimationが終了した後に完了ブロックを実行しようとしています。ただし、アニメーションが完了する前にアニメーションブロックが呼び出されるようです。ただし、アニメーションは引き続き正しく発生します。
[CATransaction begin];
[self.view.layer addAnimation:self.dropAndBounceAnimation forKey:@"appearance"];
[CATransaction setCompletionBlock:completionBlock];
[CATransaction commit];
DropAndBounceAnimationは、position.yのCAKeyFrameAnimationであり、期間は固定されています。
これが本当に正しい修正かどうかはわかりませんが、completion-block beforeを設定してレイヤーにアニメーションを追加すると、completion-blockは常に正しいタイミングで呼び出されます。
[CATransaction begin];
[CATransaction setCompletionBlock:completionBlock];
[self.view.layer addAnimation:self.dropAndBounceAnimation forKey:@"appearance"];
[CATransaction commit];
アニメーションを追加する前に完了ブロックを設定する必要があります。
[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];
これは、ビューでのアニメーションの完了後に完了ブロックをトリガーする必要があります。
Swift 3.0.1、Xcode 8バージョン:
CATransaction.begin()
CATransaction.setCompletionBlock({
print("Transaction completed")
})
print("Transaction started")
view.layer.add(dropAndBounceAnimation, forKey: "appearance")
CATransaction.commit()
非同期でアニメーションを開始してみてください。
DispatchQueue.main.async {
self.startAnimation()
}
アニメーションを呼び出す前にビューを設定すると、ビューの描画に干渉する可能性があるためです。