web-dev-qa-db-ja.com

view.alpha = 0 vs view.hidden = YESの影響は何ですか?

透明度は悪いです。iOSデバイスでは、重いマシンよりもさらに透明です。したがって、私は最初にview removeFromSuperViewを使用し、該当しない場合はview.hidden=YESを使用し、最後の手段としてview.alpha=0を使用することを考えました。しかし、実際には裏で何が起こっているのかわかりません。特に後者の2つの間に違いはありますか?

UIView animateWithDuration:animations:completion:シナリオがあります。完了ブロックにhidden = YESを配置すると、アニメーションブロックを終了せずに非表示になります。したがって、私はalpha = 0に頼らなければなりません。

一方に対する他方のペナルティは何ですか?乾杯、EP。

37
epologee

アルファ0.0のビューがまだ描画されているかどうかはわかりません。ドキュメントライブラリを確認します。

ビューを非表示

ビューを視覚的に非表示にするには、hiddenプロパティをYESに設定するか、alphaプロパティを0.0に変更します。非表示のビューは、システムからタッチイベントを受け取りません。ただし、非表示のビューは、ビュー階層に関連付けられている自動サイズ変更やその他のレイアウト操作に参加します。したがって、ビューを非表示にすることは、特にビューをある時点で再び表示する予定がある場合は特に、ビュー階層からビューを削除するのに便利な代替手段です。

私もここでこの回答を見つけました http://www.iphonedevsdk.com/forum/iphone-sdk-development/65525-whats-difference-between-alpha-0-hidden-yes.html

それは言う:

Cocoa Touchは0.02未満のアルファも非表示として扱い、そのアルファレベルより下は非表示であるため、Appleのエンジニアは非表示のコントロールはクリックできないようにすることを決定しました。

アルファ値を使用するには、グラフィックハードウェアがオブジェクトの各ピクセルとその下にあるすべてのものをブレンドする必要があります。計算量が多いです。一方、隠しフラグはスイッチです。オンにすると、OSはオブジェクトを描画する必要がないことを認識します。

67
LightMan

非表示プロパティの代わりにアルファを設定することの1つの利点は、アルファプロパティがアニメーションでより適切に再生されることです。ナビゲーションバーを表示/非表示にするアニメーションがあり、alphaプロパティを使用すると、ナビゲーションバーがフェードアウトしましたが、非表示のプロパティの方が急激でした。

3
TPoschel

アルファが0の何かが描画されますが、非表示のビューは画面に再描画されません。これはとにかくビューが変更された場合にのみ発生するため、違いはわずかです。パフォーマンスの問題が発生している場合は、時間プロファイラーとコアアニメーション楽器を使用してプロファイリングすることを強くお勧めします。

2
Skyler Saleh