1

UIImageアニメーションを使った のクロスフェードについての投稿がたくさんあります。しかし、アニメーションなしでクロスフェードを制御する方法が見つかりませんが、代わりに自分で制御します。たとえば、 と の間のパラメーターを使用して0.01.0クロスフェードの量を制御します。

2 つUIImageViewの を互いの後ろに置いてalpha(上の 1 つを から1.00.0、下の 1 つを に1.0) 制御することもできますが、それは適切なクロスフェードではありません。

よりグラフィックにするには: 画面上に と の間の値を与えるスライダーが0.0あり1.0、その上に画像があります。私が望むのは、最初に表示された画像 (スライダーが の場合0.0) と別の画像 (スライダーが の場合に完全に表示される場合)の間でクロスフェードすることです1.0。そのため、スライダーをゆっくり動かすと、別の画像がゆっくりと表示されます。

4

3 に答える 3

5

画像ビューalphaアプローチを使用できます。これがどの程度正しいかは、探している効果によって異なります。0 から 1 の間の値を使用すると、このアプローチが比較的単純になり、当然の選択となります。

CGContextSetBlendModeまた、両方の画像をコンテキストにレンダリングし、 を (場合によっては と共に) 使用kCGBlendModeMultiplyして画像を結合することも検討できます。これで使用できるパラメーターがないため、レンダリングのアルファを変更して、許容できるマージ/フェードを取得する必要があります。

于 2014-03-17T15:16:35.580 に答える
2

背景がクリアな 2 つの UIImageView を使用し、アルファ チャネルを 0 ~ 1、1 ~ 0 に変化させると、探している効果に非常に近くなるはずです。両方の背後に黒い背景があると、うまく機能することがわかりました。これはおそらく真のクロスフェードではありませんが、ほとんどの用途には十分に近いものです。

于 2014-03-17T16:24:08.403 に答える
0

それを達成するために、私は CATransition アニメーションを使用しました:
これは古いコードのスニペットです

CATransition *fadeTransition = [CATransition animation];
fadeTransition.duration = 1.0f;
fadeTransition.type = kCATransitionFade;
fadeTransition.endProgress = 0.75;
[imageView setImage:/*YourImage*/];
[imageView.layer addAnimation:fadeTransition forKey:nil];

-endProgressプロパティを使用すると、完了する前に終了を設定できますが、何を達成したいのか明確にはわかりません。

于 2014-03-17T15:04:06.927 に答える