web-dev-qa-db-fra.com

UIView: opaque vs alpha vs opacity

Comment opaquealpha et l'opacité de l'arrière-plan fonctionnent-ils ensemble pour une UIView et quelles sont les différences entre eux?

IView http://i.minus.com/jb2IP8TXbYTxKr.png

55
Besi

opaque signifie ne pas dessiner quoi que ce soit en dessous, même si vous êtes transparent.

L'alpha de la couleur d'arrière-plan n'affecte que la transparence de la couleur d'arrière-plan, et rien d'autre dessiné sur la vue.

alpha affecte tout ce qui est dessiné dans la vue.


La propriété opaque peut vous donner une augmentation de la vitesse - si vous savez que votre vue aura jamais une transparence, vous pouvez la définir sur YES et lorsque iOS rend votre vue, elle peut effectuer des optimisations de performances et le rendre plus rapidement. Si ce paramètre est défini sur NO iOS devra fusionner votre vue avec la vue située en dessous, même si elle ne contient aucune transparence.

L'alpha affectera également l'alpha de la couleur de fond, c'est-à-dire que si la couleur d'arrière-plan est transparente de 0,5 et l'alpha également de 0,5, cela a pour effet de rendre l'alpha 0,25 de la vue d'arrière-plan (0,5 * 0,5).

125
deanWombourne

Pour le très bon réponse par deanWombourne, il vaut la peine d'ajouter que, sauf si vous ne dessinez pas votre propre contenu à l'aide de la méthode drawRect:, la propriété opaque n'a aucun effet.

doc d'Apple :

Il vous suffit de définir une valeur pour la propriété opaque dans les sous-classes de UIView qui dessine son propre contenu en utilisant drawRect : méthode. La propriété opaque n'a aucun effet dans les classes fournies par le système comme UIButton, UILabel, UITableViewCell, etc.

Si vous dessinez votre propre contenu, gardez à l'esprit que l'opaque n'est qu'un indice

Cette propriété fournit un indice au système de dessin sur la façon dont elle doit traiter la vue.

et quelques autres directives du même doc d'Apple:

Si la vue est opaque et ne remplit pas ses limites ou contient un contenu totalement ou partiellement transparent, les résultats sont imprévisibles. Vous devez toujours définir la valeur de cette propriété sur NO si la vue est totalement ou partiellement transparente.

9
Mikolaj