¿Cómo controlar la sombra y la falta de definición?

He diseñado elementos de interfaz de usuario en boceto, y uno de ellos tiene una sombra con desenfoque 1 y propagación 0. Miré el documento de la propiedad de capa de vista y la capa no tiene nada llamado extensión o desenfoque, ni nada equivalente (el único control era simplemente shadowOpacity) ¿Cómo controlar las cosas como desenfoque y propagación?

EDITAR:

Aquí están mis configuraciones en Sketch: Configuración de sombra de dibujo

Y aquí es lo que quiero que se vea mi sombra:

Shadow quería

Y aquí es cómo se ve en este momento:

Sombra actual
Tenga en count que debe hacer clic en la image para ver realmente la sombra.

Mi código es el siguiente:

func setupLayer(){ view.layer.cornerRadius = 2 view.layer.shadowColor = Colors.Shadow.CGColor view.layer.shadowOffset = CGSize(width: 0, height: 1) view.layer.shadowOpacity = 0.9 view.layer.shadowRadius = 5 } 

Puedes probar esto … puedes jugar con los valores. El shadowRadius dicta la cantidad de desenfoque. shadowOffset dicta dónde va la sombra.

Swift 2.0

 let radius: CGFloat = demoView.frame.width / 2.0 //change it to .height if you need spread for height let shadowPath = UIBezierPath(rect: CGRect(x: 0, y: 0, width: 2.1 * radius, height: demoView.frame.height)) //Change 2.1 to amount of spread you need and for height replace the code for height demoView.layer.cornerRadius = 2 demoView.layer.shadowColor = UIColor.blackColor().CGColor demoView.layer.shadowOffset = CGSize(width: 0.5, height: 0.4) //Here you control x and y demoView.layer.shadowOpacity = 0.5 demoView.layer.shadowRadius = 5.0 //Here your control your blur demoView.layer.masksToBounds = false demoView.layer.shadowPath = shadowPath.CGPath 

Swift 3.0

 let radius: CGFloat = demoView.frame.width / 2.0 //change it to .height if you need spread for height let shadowPath = UIBezierPath(rect: CGRect(x: 0, y: 0, width: 2.1 * radius, height: demoView.frame.height)) //Change 2.1 to amount of spread you need and for height replace the code for height demoView.layer.cornerRadius = 2 demoView.layer.shadowColor = UIColor.black.cgColor demoView.layer.shadowOffset = CGSize(width: 0.5, height: 0.4) //Here you control x and y demoView.layer.shadowOpacity = 0.5 demoView.layer.shadowRadius = 5.0 //Here your control your blur demoView.layer.masksToBounds = false demoView.layer.shadowPath = shadowPath.cgPath 

Ejemplo con propagación

Ejemplo con propagación

Para crear una sombra básica

  demoView.layer.cornerRadius = 2 demoView.layer.shadowColor = UIColor.blackColor().CGColor demoView.layer.shadowOffset = CGSizeMake(0.5, 4.0); //Here your control your spread demoView.layer.shadowOpacity = 0.5 demoView.layer.shadowRadius = 5.0 //Here your control your blur 

Ejemplo básico de Shadow en Swift 2.0

SALIDA

Este código funcionó muy bien para mí:

 yourView.layer.shadowOpacity = 0.2 // opacity, 20% yourView.layer.shadowColor = UIColor.black.cgColor yourView.layer.shadowRadius = 4 // blur yourView.layer.shadowOffset = CGSize(width: 0, height: 2) // Spread x, y yourView.layer.masksToBounds = false 

Mi solución basada en este post responde: (Swift 3)

 let shadowPath = UIBezierPath(rect: CGRect(x: -1, y: -2, width: target.frame.width + 2, height: target.frame.height + 2)) target.layer.shadowColor = UIColor(hexString: shadowColor).cgColor target.layer.shadowOffset = CGSize(width: CGFloat(shadowOffsetX), height: CGFloat(shadowOffsetY)) target.layer.masksToBounds = false target.layer.shadowOpacity = Float(shadowOpacity) target.layer.shadowPath = shadowPath.cgPath