iphone ios core-graphics cagradientlayer

iphone - UIView gradiente transparente



ios core-graphics (4)

Así es como lo haré.

Paso 1 Defina una vista de gradiente personalizada (Swift 4):

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

Paso 2 : arrastre y suelte un UIView en su guión gráfico y establezca su clase personalizada en GradientView

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

https://github.com/yzhong52/GradientViewDemo

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

No puedo usar CAGradientLayer estándar porque el fondo es más complejo que UIColor. Tampoco puedo superponer un PNG porque el fondo cambiará a medida que mi subvista se desplaza a lo largo de la vista de desplazamiento vertical principal (ver imagen).

Tengo una alternativa no elegante: hacer que mi clip uiview muestre sus subvistas y mover un png degradado previamente renderizado del fondo a medida que se desplaza la vista de desplazamiento principal.


Esta fue una solución embarazosamente fácil: aplicar 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!


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

Con esto, puede tener esa vista, colocarla encima de su vista de desplazamiento real, y hacer que su vista de degradado (si lo desea) "transfiera" todos los eventos táctiles (es decir, renuncie a la primera respuesta).


Me encontré con el mismo problema y terminé escribiendo mi propia clase. Parece una exageración seria, pero era la única forma que podía encontrar de hacer degradados con transparencia. Puedes ver mi descripción y el ejemplo de código aquí

Básicamente se trata de una UIView personalizada que crea dos imágenes. Uno es un color sólido, el otro es un degradado que se usa como una máscara de imagen. A partir de ahí, apliqué la imagen resultante al uiview.layer.content.

Espero que ayude, Joe