uiviewアニメーションクロスフェードにより、アルファは1.0未満に低下しますか?

StackOverflow https://stackoverflow.com/questions/3461590

質問

Uiviewアニメーションを使用して、2つのビュー間でクロスフェードしています。私は次の驚くべき事実に気づきました:

同一の場所に2つの同一のビューがある場合(たとえば)、それらの間でクロスフェードをアニメーション化した場合(例:同じアニメーションで1.0から0.0で0.0から1.0でアルファをアニメーション化します)アニメーション、目に見える結果は、アニメーション中に不透明度をわずかに下回っています。これは顕著なアーティファクトであり、クロスフェードビューの背後に他のビューを置くことで検証できます(アニメーション中に再び不明瞭になる前に一時的に見えるようになります)。

私は期待するでしょう(使用してください どれか アニメーションタイミングカーブ)0-> 1および1-> 0アルファ遷移が完全にペアになっていることは、常に1.0の正味アルファになり、このテストの状況では、アルファに目に見える変化を見ることはありません。

ここで何が起こっているのか考えてみませんか? 「修正」のためにこれをハッキングすることもできますが、ブレンドで概念的に見逃していることにほとんど興味があります。

ありがとう!

役に立ちましたか?

解決

1.0に加算されるアルファを備えた2つの積み重ねられたビューは、あなたが思うことをしません。それらは増え、追加されていません。

一度にチャンクしましょう。これが背景です。100%まで輝いています。

bg
|======>
|======>
|======>
|======>

次に、上に別のビュー、50%の不透明度を追加しましょう。それは意味します 背景の50%を通過できます

bg 50%
|===|===>
|===|
|===|===>
|===|

上にさらに50%のビューがある場合はどうなりますか?

bg 50% 50%
|===|===|===>
|===|   |
|===|===|
|===|   |

後ろのものの50%が通過します. 。これは、バックグラウンドレイヤーの50%×50%= 25%がまだ表示されていることを意味します。

さて、あなたは本当に何をしたいですか?新しいビューがスムーズに表示され、古いビューを通過する量が増加しています。だから、2つのビューを積み重ねて、上部のビューをフェードアウトしますが、 ずっと底を100%不透明度にしておく. 。それ以外の場合は、アニメーション中に背景の一部を表示します。

他のヒント

これは実際には根拠のない単なる推測ですが、アルファは CGFloat, 、私は、そのタイプの精度で浮かぶポイントを表す困難を考えると、それについて何かを1.0に合計することを想定しようとすることを勧めます。彼らはおそらく0.99程度になり、このアーティファクトを引き起こします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top