我正在尝试实现翻页动画 - 当用户没有快速浏览网页时,这会动作。
我的代码如下所示:
[CATransaction begin];
[CATransaction setAnimationDuration:duration];
[CATransaction setCompletionBlock:^{
if (pageDifference == 1 && setDelegate) {
[self cleanupFlip];
self.animationInProgress = NO;
}
}];
flipAnimationLayer.transform = endTransform;
[CATransaction commit];
endTransform
是一个CATransform3DIdentity
,正如我所说,它可以正常工作。在我的cleanupFlip
我准备下一页的屏幕截图,这使我能够执行页面翻转动画。而我所提供的屏幕截图似乎是问题所在;一旦用户点击快速浏览页面,动画就不会发生,但页面只会改变 - 没有页面翻动动画。我通过设置一个标志animationInProgress
得到了改进,避免在旧的完成之前开始下一个动画。
我没有得到:我希望工作得很好,因为我在动画的最后设置animationInProgress
标志,所以应该准备好一切下一次运行 - 但它不是......
在模拟器上我可以比在设备上点击更快 - 我必须等待一秒钟,直到我可以开始下一页翻页。
不进行屏幕截图(例如,仅使用空图像),一切都按预期工作。如果cleanupFlip
需要一些时间,似乎问题就好了。
我是如何做到这一点的?
非常感谢!
答案 0 :(得分:0)
此行为的最可能原因是用户比动画更快。也就是说,第二个[CATransaction begin]在第一个动画完成之前启动,因此在执行setCompletionBlock之前。我不确定具体的顺序是什么,但在代码中设置一些NSLog语句应该清楚。
一种解决方案可能是创建不在setCompletionBlock中的图像,而是在开始之前。或者,如果创建图像需要花费大量时间,请在提交第一个事务后立即为下一页做好准备。
在[CATransaction begin]之前放置[CATransaction flush]在这些情况下也帮助了我。