3

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

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

    } completion:nil];

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

4

2 回答 2

4

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

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

    } completion:nil];
于 2013-10-04T14:00:02.913 回答
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. 完毕

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

于 2013-10-04T12:17:45.063 回答