3

UIImageView から別の画像への変更を次のようにアニメーション化したいと思います。

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

    } completion:nil];

これは、1 つのアニメーションで問題なく機能します。しかし、最初のアニメーションがまだ進行中のときに 1 つ以上のアニメーションを開始すると、ある種のジャンプやちらつきのように見えるワイヤード動作が発生します。シミュレーターで遅いアニメーションを使用すると、最初のアニメーションが停止し、最初のアニメーションの最後の画像にジャンプして、2 番目のアニメーションで開始するように見えます。これを防ぐ方法を知っている人はいますか?

4

2 に答える 2

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. 2 つのスナップショットのクロス ディゾルブ (クロス フェード) を実行します。
  5. 終わり

ここで、問題の原因を確認できます。不適切に定義されたアニメーション ブロック ビューが原因で、複数のスクロール ビュー アニメーション (クロスフェード) が混在している可能性があります (内部イメージ ビューだけでなく、スクロール ビュー全体)。

于 2013-10-04T12:17:45.063 に答える