在UIImageView上闪烁多个并发调用UIView transitionWithView with UIViewAn



我想通过以下方式将图像从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整个滚动视图启动动画。交叉溶解动画包括以下步骤:

  1. 创建动画视图(在您的情况下为滚动视图(图层的"快照">
  2. 在动画块中执行更改
  3. 创建视图的新快照。这一次,快照已包含更改(图像视图具有新图像(
  4. 执行两个快照的交叉溶解(交叉淡入淡出(。

在这里,您可以看到问题出在哪里。您可能混合了由未正确定义的动画块视图(整个滚动视图而不仅仅是内部图像视图(引起的多个滚动视图动画(交叉淡入淡出(

最新更新