繁体   English   中英

立即调用CATransaction完成

[英]CATransaction completion being called immediately

我正在尝试在CAAnimation完成后执行完成块。 但是,似乎在我的动画完成之前调用了动画块。 但动画仍然正确。

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

dropAndBounceAnimation是position.y上的CAKeyFrameAnimation,具有固定的持续时间。

我不确定这是否是正确的修复,但通过为图层添加动画之前设置完成块将在正确的时间始终调用完成块。

[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()
}

因为如果在调用动画之前进行一些视图设置,它可能会干扰视图绘制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM