在UIImageView上使用UIViewAnimationOptionTransitionCrossDissolve对UIView transitionWithView进行多次并发调用时闪烁

时间:2013-10-04 11:54:15

标签: ios objective-c uiimageview uiviewanimation uiviewanimationtransition

我想用UIImageView动画将图像更改为另一个:

[UIView transitionWithView:self.scrollView
                      duration:1
                       options:UIViewAnimationOptionTransitionCrossDissolve | UIViewAnimationOptionAllowUserInteraction
                    animations:^
    {
        self.imageView.image = image;

    } completion:nil];

对于一个动画来说效果非常好。 但是如果我有一个或多个动画开始而第一个动画仍然在进行中我会得到一些有线行为,它看起来像某种跳跃或闪烁。 如果我在模拟器中使用慢动画,似乎第一个动画停止并向右跳到第一个动画的结束图像,然后从第二个动画开始。 有没有人知道如何防止这种情况发生?

2 个答案:

答案 0 :(得分:4)

尝试告诉动画它应该从当前状态开始。 (UIViewAnimationOptionBeginFromCurrentState)

[UIView transitionWithView:self.imageView
                      duration:1
                       options:UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionTransitionCrossDissolve | UIViewAnimationOptionAllowUserInteraction 
                    animations:^
    {
        self.imageView.image = image;

    } completion:nil];

答案 1 :(得分:0)

试试这个

[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为整个滚动视图启动动画。交叉溶解动画包括以下步骤:

  1. 创建动画视图的“快照”(在您的案例中为滚动视图)图层
  2. 在动画块中执行更改
  3. 创建新的视图快照。这次,快照已包含更改(图像视图具有新图像)
  4. 执行两个快照的交叉溶解(交叉淡入淡出)。
  5. 完成
  6. 在这里,您可以看到问题的来源。您可能混合了由不正确定义的动画块视图(整个滚动视图而不仅仅是内部图像视图)导致的多个滚动视图动画(交叉淡入淡出)