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)