Ejemplo colorWithAlphaComponent en Swift


¿Cuál es la sintaxis correcta para esta función en Swift?

Lo siguiente funciona bien, y colorea el fondo púrpura:

 self.view.backgroundColor = UIColor.purpleColor()

Cuando encadeno la función colorWithAlphaComponent, la vista muestra el alfa correcto por un momento, y luego cambia a un púrpura opaco que es relativamente oscuro:

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

¿Es esta la función recomendada para agregar un valor alfa a un UIColor?

Además, ¿por qué la ventana emergente intellisense dice que esta función espera un ¿UIColor como parámetro? Por ejemplo,

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

EDITAR: El comportamiento es extraño. Estoy configurando el color de fondo en un controlador de vista que se está cargando en un modal. A medida que el modal se desliza hacia arriba desde la parte inferior, el alfa es correcto. Cuando el modal termina de cargar, el color de fondo cambia a opaco?!

EDICIÓN 2: El problema no fue con el código both tanto el código anterior como la sugerencia de abajo estaban aplicando correctamente el alfa. La cuestión es la forma en que se presentan los modales the se está eliminando la vista subyacente. Véase:
Vista Modal Transparente en el Controlador de Navegación

Author: Community, 2014-06-20

4 answers

No es extraño, se está comportando exactamente como debería. Aunque muchos de los métodos de UIColor son métodos de clase, todavía hay algunos métodos de instancia, y este es uno de ellos. De la documentación de UIColor.

Color con el componente alfa:

Crea y devuelve un objeto de color que tiene el mismo espacio de color y los mismos valores de componente que el receptor, pero tiene el componente alfa especificado.

Entonces, colorWithAlphaComponent: solo cambia el alfa valor de su receptor. Ejemplo:

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

Y la razón por la que está viendo autocompletado para este método de instancia en el tipo, es porque Swift le permite usar métodos de instancia como métodos de tipo curry. En el ejemplo que proporcionó, colorWithAlphaComponent realmente devuelve una función que toma un CGFloat como entrada y devuelve un UIColor.

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

Por lo tanto, si lo desea, puede llamar al método de tipo que pasa en la instancia que desea modificar, y luego llamar a la función resultante con el alfa que quieres aplicar, así.

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

Entonces, en cuanto a los problemas que está teniendo con el controlador de vista modal, no debería intentar cambiar el alfa de la vista de un controlador de vista modal. Vea esto para más información. En su lugar, debería crear manualmente una vista y agregarla a la jerarquía de vista de su controlador de vista existente (si es absolutamente necesario alterar su alfa)

 56
Author: Mick MacCallum,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:54:38

Swift 4.0

self.view.backgroundColor = UIColor.black.withAlphaComponent(0.7)
 17
Author: Arjun Yadav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-07 05:37:16

En Swift 3.0

Esto funciona para mí en xcode 8.2.

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

Puede que te ayude.

 4
Author: Ashu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-06 11:22:46

Intente smth así para establecer el color

 view.backgroundColor = UIColor(red: (64/255.0), green: (54/255.0), blue: (105/255.0), alpha: 1.0)
 2
Author: Waran-,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-11 21:42:40