Aplicar degradado en una UIView no funciona -- ios campo con swift campo con uiview campo con quartz-core campo con cagradientlayer camp Relacionados El problema

Apply gradient on a UIView not working


5
vote

problema

Español

Estoy tratando de agregar degradado a una UIView programáticamente, pero no está funcionando. Simplemente parece tener ningún color en absoluto. He adjuntado el código relevante, así como una captura de pantalla. Observe el cuadrado inferior sobre el que estoy aplicando el gradiente. ¿Alguien puede ayudarme a descubrir qué estoy haciendo mal aquí?

captura de pantalla

  let sundayView = UIView()  override func viewDidLoad() {     super.viewDidLoad()     setupViews()     setupSundayView() }  func setupViews() {     sundayView.translatesAutoresizingMaskIntoConstraints = false     view.addSubview(sundayView) }  func setupSundayView() {     sundayView.translatesAutoresizingMaskIntoConstraints = false      NSLayoutConstraint.activateConstraints([         sundayView.centerXAnchor.constraintEqualToAnchor(view.centerXAnchor),         sundayView.topAnchor.constraintEqualToAnchor(fridayView.bottomAnchor, constant: 16.0),         sundayView.trailingAnchor.constraintEqualToAnchor(view.trailingAnchor, constant: -8.0),                     sundayView.heightAnchor.constraintEqualToAnchor(mondayView.heightAnchor),         sundayView.widthAnchor.constraintEqualToAnchor(mondayView.widthAnchor)         ])      let gradient = CAGradientLayer()     gradient.frame = sundayView.bounds     gradient.colors = [         UIColor(red:1.00, green:0.37, blue:0.23, alpha:1.0).CGColor,         UIColor(red:1.00, green:0.16, blue:0.41, alpha:1.0).CGColor     ]     sundayView.layer.insertSublayer(gradient, atIndex: 0) }   
Original en ingles

I am trying to add gradient to a UIView programmatically but it is not working. It just appears to have no color at all. I have attached the relevant code as well as a screenshot. Notice the bottom square over which i am applying the gradient. Can someone help me figure out what I'm doing wrong here?

Screenshot

let sundayView = UIView()  override func viewDidLoad() {     super.viewDidLoad()     setupViews()     setupSundayView() }  func setupViews() {     sundayView.translatesAutoresizingMaskIntoConstraints = false     view.addSubview(sundayView) }  func setupSundayView() {     sundayView.translatesAutoresizingMaskIntoConstraints = false      NSLayoutConstraint.activateConstraints([         sundayView.centerXAnchor.constraintEqualToAnchor(view.centerXAnchor),         sundayView.topAnchor.constraintEqualToAnchor(fridayView.bottomAnchor, constant: 16.0),         sundayView.trailingAnchor.constraintEqualToAnchor(view.trailingAnchor, constant: -8.0),                     sundayView.heightAnchor.constraintEqualToAnchor(mondayView.heightAnchor),         sundayView.widthAnchor.constraintEqualToAnchor(mondayView.widthAnchor)         ])      let gradient = CAGradientLayer()     gradient.frame = sundayView.bounds     gradient.colors = [         UIColor(red:1.00, green:0.37, blue:0.23, alpha:1.0).CGColor,         UIColor(red:1.00, green:0.16, blue:0.41, alpha:1.0).CGColor     ]     sundayView.layer.insertSublayer(gradient, atIndex: 0) } 
              
   
   

Lista de respuestas

12
 
vote
vote
La mejor respuesta
 

Su gradiente no se muestra porque el bounds para sundayView no se configurará hasta que Diseño automático se ejecute. Anular viewDidLayoutSubviews y configura el marco de gradiente allí.

Agregue esta propiedad a su ViewController:

  var sundayGradient: CAGradientLayer?   

En setupSundayView GUARDAR EL gradient En la propiedad:

  let gradient = CAGradientLayer() sundayGradient = gradient   

Luego, configure el marco en viewDidLayoutSubviews :

  override func viewDidLayoutSubviews() {     super.viewDidLayoutSubviews()      sundayGradient?.frame = sundayView.bounds }   
 

Your gradient isn't showing because the bounds for sundayView will not be set until Auto Layout runs. Override viewDidLayoutSubviews and set the gradient frame there.

Add this property to your viewController:

var sundayGradient: CAGradientLayer? 

In setupSundayView save the gradient to the property:

let gradient = CAGradientLayer() sundayGradient = gradient 

Then set the frame in viewDidLayoutSubviews:

override func viewDidLayoutSubviews() {     super.viewDidLayoutSubviews()      sundayGradient?.frame = sundayView.bounds } 
 
 
       
       
1
 
vote

Parece que se olvidó de agregar locations a la capa de gradiente, inténtalo así:

  sundayView0  
 

It seems that you forgot to add locations to gradient layer, try it like this:

func setupSundayView() {     sundayView.translatesAutoresizingMaskIntoConstraints = false      NSLayoutConstraint.activateConstraints([         sundayView.centerXAnchor.constraintEqualToAnchor(view.centerXAnchor),         sundayView.topAnchor.constraintEqualToAnchor(fridayView.bottomAnchor, constant: 16.0),         sundayView.trailingAnchor.constraintEqualToAnchor(view.trailingAnchor, constant: -8.0),                     sundayView.heightAnchor.constraintEqualToAnchor(mondayView.heightAnchor),         sundayView.widthAnchor.constraintEqualToAnchor(mondayView.widthAnchor)         ])      let gradient = CAGradientLayer()     gradient.frame = sundayView.bounds     gradient.colors = [         UIColor(red:1.00, green:0.37, blue:0.23, alpha:1.0).CGColor,         UIColor(red:1.00, green:0.16, blue:0.41, alpha:1.0).CGColor     ]     gradient.locations = [0.0, 0.5]     sundayView.layer.insertSublayer(gradient, atIndex: 0) } 
 
 
     
     

Relacionados problema

0  Simultáneamente agregando / eliminando gradientlayer entre tres botones  ( Simultaneously adding removing gradientlayer among three buttons ) 
Digamos que tengo tres botones, la funcionalidad es que cuando se selecciona el botón, no quiero agregar MyGradientLayer para ese botón y desea para otros bot...

10  Gradiente de fondo: lineal de izquierda a derecha en el objetivo C  ( Background gradient linear left to right in objective c ) 
Mi cliente quiere la vista de fondo con este efecto degradado fondo degradado: RGB (118,118,118) | #ffffff | RGB (198,198,197) lineal de izquierda a derecha ...

3  Degradado no llena toda la vista UIVIE  ( Gradient does not fill all the uiview ) 
Quiero crear una capa de gradiente e insertarla en una vista, pero la vista no está completamente llena ... Mi código real es: gradientLayer.frame = ...

0  Color degradado a vista personalizada  ( Gradient color to custom view ) 
He creado 3 vistas personalizadas en un UIViewController . En cada vista personalizada, he creado formas usando Cashapelayer . Estas capas también conti...

63  Cagradientlayer, no cambiar el tamaño muy bien, rasgando la rotación  ( Cagradientlayer not resizing nicely tearing on rotation ) 
Estoy tratando de conseguir mis cagradientes, que estoy usando para crear bonitos fondos de gradiente, para cambiar el tamaño muy bien en la presentación de r...

0  Gradiente en UTIableViewCell aparece sobre el contenido  ( Gradient in uitableviewcell appearing over content ) 
Estoy tratando de agregar un gradiente al fondo de una celda personalizada, y cuando muestro el gradiente usando ADDSUBLAYER, se muestra sobre el resto del co...

0  Error impredecible para dibujar semicírculo en XIB TableViewCell  ( Unpredictable error to draw semicircle in xib tableviewcell ) 
En el código, estoy tratando de crear semicírculo usando Cashapelayer () y UIBEZIERPATH (). El cajero y la UIBEZIERPATH no están dibujando la ruta como se esp...

0  Las ubicaciones de CagradientLayer no son correctas  ( Cagradientlayer locations not coming correct ) 
Seguí este Publicar para establecer Ubicación de gradiente. Mi código: let color1 = UIColor(red: 0.0/255.0, green: 231.0/255.0, blue: 198.0/255.0, ...

0  Clear Uibutton con título de gradiente y esquina  ( Clear uibutton with gradient title and cornerborder ) 
Cómo agregar degradado al título de UBDUTTON, mientras que el fondo del botón está claro, pero también se envía una degradación de la esquina. Encontré cómo...

0  ¿Cómo convertir un CagradientLayer a un Uicolor con SWIFT 3 o HUE?  ( How to convert a cagradientlayer to a uicolor with swift 3 or hue ) 
Estaba tratando de hacer un color de fondo un gradiente con Hue, ( https://github.com/hyperoslo/ Hue ) y obtuve un error que dice que el fondo solo funciona c...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos