web-dev-qa-db-ja.com

すぐに呼び出されるCATransactionの完了

CAAnimationが終了した後に完了ブロックを実行しようとしています。ただし、アニメーションが完了する前にアニメーションブロックが呼び出されるようです。ただし、アニメーションは引き続き正しく発生します。

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

DropAndBounceAnimationは、position.yのCAKeyFrameAnimationであり、期間は固定されています。

42
Javache

これが本当に正しい修正かどうかはわかりませんが、completion-block beforeを設定してレイヤーにアニメーションを追加すると、completion-blockは常に正しいタイミングで呼び出されます。

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

アニメーションを追加する前に完了ブロックを設定する必要があります。

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

これは、ビューでのアニメーションの完了後に完了ブロックをトリガーする必要があります。

11
CoderSaru

Swift 3.0.1、Xcode 8バージョン:

CATransaction.begin()

CATransaction.setCompletionBlock({
  print("Transaction completed")
})

print("Transaction started")
view.layer.add(dropAndBounceAnimation, forKey: "appearance")

CATransaction.commit()
5
Vadim Bulavin

非同期でアニメーションを開始してみてください。

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

アニメーションを呼び出す前にビューを設定すると、ビューの描画に干渉する可能性があるためです。

0
mixel