color ios uibutton calayer cagradientlayer

ios - color - UIButton con GradientLayer oscurece la imagen y oscurece el degradado



gradient view swift 4 (4)

Así que logré solucionar esto haciendo [button bringSubviewToFront: button.imageView] después de agregar el degradado. Parece que no importa lo que haga, la nueva capa se agregará a la vista de la imagen, así que tengo que empujar eso al frente después.

Tengo un UIButton aquí donde me gustaría tener un degradado como fondo debajo de la imagen (símbolo con fondo transparente), pero estoy enfrentando dos problemas diferentes.

El primero de CAGradientLayer parece superponerse en la parte superior de la imagen sin importar cómo intente agregarlo, oscureciendo la imagen por completo.

En segundo lugar, el degradado en sí parece oscurecerse mucho, al igual que el botón se deshabilitó, que no lo es.

Aquí está mi código:

self.backButton = [[UIButton alloc] initWithFrame:CGRectMake(15, 35, 28, 28)]; [backButton addTarget:self action:@selector(goBack) forControlEvents:UIControlEventTouchUpInside]; [backButton setBackgroundColor:[UIColor clearColor]]; CAGradientLayer *buttonGradient = [CAGradientLayer layer]; buttonGradient.frame = backButton.bounds; buttonGradient.colors = [NSArray arrayWithObjects: (id)[[UIColor colorWithRed:.0 green:.166 blue:.255 alpha:1] CGColor], (id)[[UIColor colorWithRed:.0 green:.113 blue:.255 alpha:1] CGColor], nil]; [buttonGradient setCornerRadius:backButton.frame.size.width / 2]; [backButton.layer insertSublayer:buttonGradient atIndex:0]; [backButton setImage:[UIImage imageNamed:@"backarrow.png"] forState:UIControlStateNormal]; [backButton setEnabled:NO]; [topbarView addSubview:backButton];


Alternativamente, puede insertar la capa de degradado debajo de la capa de la vista de imagen

CAGradientLayer* gradient = [CAGradientLayer layer]; // ... [button.layer insertSublayer:gradient below:button.imageView.layer];


SWIFT 3

Aquí va un ejemplo: (Basado en la respuesta de Neil)

let layer = CAGradientLayer() layer.frame = CGRect(x: 0, y: 0, width: myButtonOutlet.layer.frame.size.width, height: myButtonOutlet..layer.frame.size.height) layer.colors = [UIColor.white.cgColor, pixelColorReceta.cgColor] layer.masksToBounds = true layer.cornerRadius = myButtonOutlet.layer.cornerRadius myButtonOutlet.layer.insertSublayer(layer, below: myButtonOutlet..imageView?.layer)

Feliz codificación :)


Swift 3

Puedes mover la imagen por encima del degradado:

contactButton.imageView?.layer.zPosition = 1

o inserte el degradado debajo de la imagen:

button.layer.insertSublayer(gradientLayer, below: button.imageView?.layer)