2

多个并发调用的UIView transitionWithView与UIViewAnimationOptionTransitionCrossDissolve我想图像的变化,从一个UIImageView与动画到另一个:闪烁上的UIImageView

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

    } completion:nil]; 

该协会致力于一个完美的动画罚款。 但是,如果我有一个或多个动画开始,而第一个动画仍在进行中,我会看到一些有线行为,它看起来像某种跳跃或闪烁。 如果我在模拟器中使用慢动画,看起来第一个动画停止并跳到第一个动画的结束图像,然后从第二个动画开始。 有没有人有一个想法如何防止这种情况发生?

回答

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. 完成

在这里你可以看到问题的来源。您可能混合了由不正确定义的动画块视图(整个滚动视图而不是仅内部图像视图)导致的多个滚动视图动画(交叉淡入淡出)

+0

感谢您的帮助。尝试过,但仍然是同样的问题。文档说:执行转换的容器视图。所以应该在我的情况下scrollView在imageView所在的位置。 – bllubbor

+0

请看看我编辑的答案。我添加了一段执行淡入淡出动画来改变图像的代码。这段代码工作正常,我多次使用过这个代码。 –

3

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

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

    } completion:nil]; 
+0

也不起作用;( – bllubbor