web-dev-qa-db-fra.com

Exemple avec colorWithAlphaComponent dans Swift

Quelle est la syntaxe correcte pour cette fonction dans Swift?

Ce qui suit fonctionne bien et colore le fond violet:

 self.view.backgroundColor = UIColor.purpleColor()

Lorsque j'enchaîne la fonction colorWithAlphaComponent, la vue affiche l'alpha correct pendant un moment, puis se transforme en un violet opaque relativement sombre:

 self.view.backgroundColor = UIColor.purpleColor().colorWithAlphaComponent(0.5)

Est-ce la fonction recommandée pour ajouter une valeur alpha à un UIColor?

En outre, pourquoi la fenêtre contextuelle intellisense indique-t-elle que cette fonction attend un UIColor comme paramètre? Par exemple.,

   self.view.backgroundColor = UIColor.colorWithAlphaComponent(<#UIColor#>)

EDIT: Le comportement est étrange. Je règle la couleur d'arrière-plan sur un contrôleur de vue qui est chargé dans un modal. Lorsque le modal glisse vers le bas, l'alpha est correct. Lorsque le modal a fini de se charger, la couleur d'arrière-plan devient opaque?!

EDIT 2: Le problème n'était pas avec le code - le code ci-dessus et la suggestion ci-dessous appliquaient correctement l'alpha. Le problème est la façon dont les modaux sont présentés - la vue sous-jacente est supprimée. Voir:
Vue modale transparente sur le contrôleur de navigation

35
kmiklas

Ce n'est pas étrange, il se comporte exactement comme il se doit. Bien que la plupart des méthodes d'UIColor soient des méthodes de classe, il existe encore quelques méthodes d'instance, et c'est l'une d'entre elles. De la documentation UIColor .

colorWithAlphaComponent:

Crée et renvoie un objet couleur qui a le même espace colorimétrique et les mêmes valeurs de composant que le récepteur, mais a le composant alpha spécifié.

Ainsi, colorWithAlphaComponent: change juste la valeur alpha de son récepteur. Exemple:

let purple = UIColor.purpleColor() // 1.0 alpha
let semi = purple.colorWithAlphaComponent(0.5) // 0.5 alpha

Et la raison pour laquelle vous voyez la saisie semi-automatique pour cette méthode d'instance sur le type, c'est parce que Swift vous permet d'utiliser les méthodes d'instance comme méthodes de type au curry. Dans l'exemple que vous avez fourni, colorWithAlphaComponent renvoie en fait une fonction qui prend un CGFloat en entrée et retourne un UIColor.

let purple = UIColor.purpleColor()
let purpleFunc: (CGFloat -> UIColor) = UIColor.colorWithAlphaComponent(purple)

Donc, si vous le souhaitez, vous pouvez appeler la méthode type en passant l'instance que vous souhaitez modifier, puis appeler la fonction résultante avec l'alpha que vous souhaitez appliquer, ainsi.

let purple = UIColor.purpleColor()
let purpleTrans = UIColor.colorWithAlphaComponent(purple)(0.5)

Ensuite, en ce qui concerne les problèmes que vous rencontrez avec le contrôleur de vue modale, vous ne devriez pas essayer de modifier l'alpha de la vue d'un contrôleur de vue modale. Voir ceci pour plus d'informations . Au lieu de cela, vous devez créer manuellement une vue et l'ajouter à la hiérarchie de vues de votre contrôleur de vue existant (si vous devez absolument modifier son alpha)

67
Mick MacCallum

Swift 4.

self.view.backgroundColor = UIColor.black.withAlphaComponent(0.7)
29
Arjun Yadav

dans Swift 3.

Cela fonctionne pour moi dans xcode 8.2.

yourView.backgroundColor = UIColor.black.withAlphaComponent(0.5)

Cela peut vous aider.

5
Ashu

Essayez smth comme celui-ci pour définir la couleur

 view.backgroundColor = UIColor(red: (64/255.0), green: (54/255.0), blue: (105/255.0), alpha: 1.0)
2
Waran-

Puisque UIColor fait partie d'UIKit, il a été remplacé dans SwiftUI par Color. La méthode équivalente est .opacity(_ opacity: Double) par exemple:

Color.purple.opacticy(0.5)
0
JoGoFo