0

3つ以上の画像を繰り返し循環できるクリック可能な画像を実装しようとしています。サイクルが設定されたら、画像を操作する必要はありません。サイクリングは、イベントベースではなく、時間ベースです。画像はスムーズに移行する必要があります。

この問題に取り組むための最良の方法は何ですか?

私の最初のアプローチは、単一のメソッドの有限状態マシンであり、UIViewそのメソッドのセレクターを使用してアニメーションブロックをチェーンします。[button setImage:nextImage forState:UIControlStateNormal]アニメーション化されていないため、これは失敗しました。

私の2番目のアプローチはCABasicAnimation、レイヤーを確認することでした。これはより低レベルのアプローチのように見えましたが、トランジションを連鎖させる方法がわかりませんでした(たとえば、このアクションが完了したら次のアクションを設定する)。

複数のボタンを使用してアプローチし、それらの間でフェードするという私の腸の感覚は明らかに間違っていますが、次にどこに行くべきかわかりません。

の画像間をスムーズにフェードするにはどうすればよいUIButtonですか?

これらの遷移を連鎖させるにはどうすればよいですか?

正しい方法は何ですか?

編集: 画像i1、i2、i3は順番に行く必要がありますi1-> i2-> i3-> i2-> i1->i2->i3など

4

3 に答える 3

4

私の最初の考えはですがUIImageView.animationImages、それがフェードをサポートしているとは思いません。

UIButton画像を表示するためにを使用しないでください。描画を処理する他の何かの上にある非表示のボタンにするだけです。

必要なアニメーションを実行する簡単な方法の1つは、2つの画像ビューを使用することです。「フェードイン」画像ビューを前面に移動し(-[UIView bringSubviewToFront:])、アルファを0に設定してから、アルファを1にアニメーション化します。

于 2010-06-28T11:55:14.453 に答える
0

私の解決策:

  • UIButtonとコンテナを持っていUIViewます。
  • コンテナーUIViewには、すべての画像UIImageViewが子ビューとして含まれていました。
  • すべての子ビューのアルファが 1.0 に設定されている UIViewController の viewDidAppear メソッドでアニメーションを開始します。次に、0 番目の imageView アルファを 1.0 に設定します。
  • このアニメーションが終了したら、遅延を設定する同じメソッドを思い出してください。
  • 次の画像へのアニメーション化を処理します。

それが正しいやり方かどうかはわかりませんが、別の方法よりもずっときれいに見えました-

  • すべての画像は、コード内の画像名を汚染することなく、Interface Builder で設定できました。
  • メソッドは自己完結型であり、メモリ管理に手間がかかりませんでした。
于 2010-06-28T22:30:22.570 に答える
-3

私はこのようなものがうまくいくとかなり確信しています:

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:duration];

[button setImage:whicheverImage forState:UIControlStateNormal];

[UIView commitAnimations];

たぶん 0.5 (秒) のデュレーションを指定すると、スムーズにフェードスルーするはずです。

于 2010-07-01T19:45:41.027 に答える