我想通过以下方式将图像从UIImageView更改为另一个图像的动画:
[UIView transitionWithView:self.scrollView
duration:1
options:UIViewAnimationOptionTransitionCrossDissolve | UIViewAnimationOptionAllowUserInteraction
animations:^
{
self.imageView.image = image;
} completion:nil];
这对于一个动画来说效果很好。但是,如果我有一个或多个动画开始,而第一个动画仍在进行中,我会得到一些有线行为,它看起来像某种跳跃或闪烁。如果我在模拟器中使用慢速动画,似乎第一个动画被停止并直接跳到第一个动画的结束图像,然后从第二个动画开始。有没有人知道如何防止这种情况发生?
尝试告诉动画它应该从当前状态开始。(UIViewAnimationOptionBeginFromCurrentState(
[UIView transitionWithView:self.imageView
duration:1
options:UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionTransitionCrossDissolve | UIViewAnimationOptionAllowUserInteraction
animations:^
{
self.imageView.image = image;
} completion:nil];
试试这个
[UIView transitionWithView:self.imageView...
通过使用[UIView transitionWithView:self.scrollView...
您基本上是在说"嘿,我想对整个滚动视图进行动画处理",您可能不想要。您始终希望仅对特定更改的图像视图进行动画处理。
编辑:
看看这段代码。它执行在图像视图中更改图像的交叉淡入淡出(交叉溶解(动画。它工作正常,我已经多次使用此代码。
[UIView transitionWithView:imageView
duration:0.4
options:UIViewAnimationOptionTransitionCrossDissolve | UIViewAnimationOptionAllowUserInteraction
animations:^{
// Set the new image
// Since its done in animation block, the change will be animated
imageView.image = newImage;
} completion:^(BOOL finished) {
// Do whatever when the animation is finished
}];
如果我正确理解您的问题,以下是问题可能在哪里的解释:
[UIView transitionWithView:self.scrollView
整个滚动视图启动动画。交叉溶解动画包括以下步骤:
- 创建动画视图(在您的情况下为滚动视图(图层的"快照">
- 在动画块中执行更改
- 创建视图的新快照。这一次,快照已包含更改(图像视图具有新图像(
- 执行两个快照的交叉溶解(交叉淡入淡出(。
- 做
在这里,您可以看到问题出在哪里。您可能混合了由未正确定义的动画块视图(整个滚动视图而不仅仅是内部图像视图(引起的多个滚动视图动画(交叉淡入淡出(