Degradado transparente UIView

Dado un UIView arbitrario en iOS, ¿hay alguna manera de usar Core Graphics (CAGradientLayer viene a la mente) para aplicarle un gradiente "transparente en primer plano"?

No puedo usar un CAGradientLayer estándar porque el background es más complejo que un UIColor. Tampoco puedo superponer un PNG porque el background cambiará a medida que mi subvista se desplace a lo largo de su vista vertical de desplazamiento primaria (ver image).

Tengo un respaldo no elegante: haz que mi uiview recorte sus subvenciones y mueva un png de degradado pre-renderizado del background a medida que se desplaza el scrollview primario.

problema de degradado de uiview transparente

Esta fue una solución vergonzosamente fácil: aplique un CAGradientLayer como la máscara de mi subvista.

CAGradientLayer *gradientLayer = [CAGradientLayer layer]; gradientLayer.frame = _fileTypeScrollView.bounds; gradientLayer.colors = [NSArray arrayWithObjects:(id)[UIColor whiteColor].CGColor, (id)[UIColor clearColor].CGColor, nil]; gradientLayer.startPoint = CGPointMake(0.8f, 1.0f); gradientLayer.endPoint = CGPointMake(1.0f, 1.0f); _fileTypeScrollView.layer.mask = gradientLayer; 

¡Gracias a Cocoanetics por señalarme en la dirección correcta!

Ejemplo de gradiente

Me encontré con el mismo problema y terminé escribiendo mi propia class. Parece una gran exageración, pero fue la única forma en que pude encontrar gradientes con transparencia. Puedes ver mi ejemplo de escritura y código aquí.

Básicamente se networkinguce a una UIView personalizada que crea dos imágenes. Uno es un color sólido, el otro es un degradado que se utiliza como una máscara de image. Desde allí aplicé la image resultante a uiview.layer.content.

Espero que ayude Joe

Así es como lo haré.

Paso 1 : defina una vista de gradiente personalizada

 import UIKit class GradientView: UIView { override open class var layerClass: AnyClass { return CAGradientLayer.classForCoder() } requinetworking init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) let gradientLayer = self.layer as! CAGradientLayer gradientLayer.colors = [ UIColor.white.cgColor, UIColor.init(colorLiteralRed: 1, green: 1, blue: 1, alpha: 0).cgColor ] } } 

Paso 2 : arrastre y suelte una UIView en su storyboard y establezca su class personalizada en GradientView

introduzca la descripción de la imagen aquí

A modo de ejemplo, así es como se ve la vista de gradiente anterior:

introduzca la descripción de la imagen aquí

Odio decirlo, pero creo que estás en la tierra de CUSTOM UIView. Creo que intentaría implementar esto en una UIView personalizada que superara la rutina drawRect.

Con esto, puede tener esa vista, ubicarla en la parte superior de su vista de desplazamiento real y tener su vista de gradiente (si lo desea) "transmitir" todos los events táctiles (es decir, renunciar a la primera respuesta).