23

UIViewのopaqueプロパティは、デフォルトでは常に「YES」に設定されています。しかし、UIViewクラスリファレンスはこれを述べています:

不透明なビューは、その境界を完全に不透明なコンテンツで満たすことが期待されます。つまり、コンテンツのアルファ値は1.0である必要があります。ビューが不透明で、境界を埋めていないか、全体的または部分的に透明なコンテンツが含まれている場合、結果は予測できません。

ビューの変更はalpha、特にトランジションやアニメーション中に非常に一般的であるため、上記のステートメントは、プロパティも変更する場合は、常に手動で設定opaqueする必要があることを意味します。NOalpha

しかし、手動で調整opaqueしたことはなく、目立った症状もありません。この考慮をすることはどれくらい必要ですか?

4

2 に答える 2

16

答えは、iOSは、ビューalphaが1未満の場合、ビューのopaqueプロパティに関係なく、ビューの背後にコンテンツを描画する必要があることを認識するのに十分スマートであるということです。

opaqueコメントへの回答:私の限られた実験から、ビューのプロパティは効果がないと思います。(ドキュメントが間違っていると思います。)ビューのレイヤーのopaqueプロパティには効果があります。CGContextパス先にdrawRect:アルファチャネルがあるかどうかを制御します。レイヤーのopaqueプロパティがYESの場合、コンテキストにはアルファチャネルがありません(すべてのピクセルのアルファが1.0であるかのように扱われます)。

ビューのopaqueプロパティを変更しても、レイヤーのopaqueプロパティには影響しません。これは、(たとえば)ビューのalphaプロパティとは異なります。ビューのプロパティは、レイヤーのプロパティの単なるラッパーですopacity

理論的には、プロパティによって描画を最適化できることを文書opaque化したので、Appleは将来その最適化を実装する可能性があります。実際には、そうすると多くのアプリが破損する可能性があるため、古いSDKに対してリンクされたアプリにそのような変更を適用することはおそらくありません。(アプリがリンクされているバージョンに応じて、UIKitの動作を変えることができます。)

于 2012-05-04T07:18:31.450 に答える
1

ビューのコンテンツ自体(サブビューではない)にアルファがない限り、問題ありません。したがって、アルファ付きのPNG画像でUIImageViewsを初期化すると、は自動的opaqueにに設定されNOます。

通常、不透明でないビューはそれほど多く必要ありません。しかし、完全なビューのアルファはとにかく少し異なります。

于 2012-05-04T07:21:13.140 に答える