52

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

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

dropAndBounceAnimation は、position.y の CAKeyFrameAnimation であり、持続時間が固定されています。

4

4 に答える 4

115

これが本当に正しい修正かどうかはわかりませんが 、レイヤーのアニメーションを追加する前に完了ブロックを設定することで、完了ブロックが一貫して正しいタイミングで呼び出されます。

[CATransaction begin];
[CATransaction setCompletionBlock:completionBlock];
[self.view.layer addAnimation:self.dropAndBounceAnimation forKey:@"appearance"];
[CATransaction commit];
于 2013-11-14T11:01:23.893 に答える
14

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

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

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

于 2015-04-15T12:13:33.790 に答える
7

Swift 3.0.1、Xcode 8バージョンは次のとおりです。

CATransaction.begin()

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

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

CATransaction.commit()
于 2016-11-28T14:47:07.030 に答える