Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

334
Vistas
¿Cómo desenfocar el borde de la máscara para una NSImage?

Estoy tratando de desenfocar el borde de la máscara para una NSImage en Swift y no puedo entender cómo hacerlo. Se supone que la máscara se crea a partir de un CGMutablePath , para que se pueda cambiar mediante programación. Así es como se ve en este momento:Bordes afilados Así es como se supone que debe verse:Bordes borrosos

El código para crear la máscara con bordes afilados es el siguiente:

 class MyView: NSView { override func draw(_ dirtyRect: NSRect) { let bottomLayer = CALayer() bottomLayer.bounds = self.bounds bottomLayer.position = CGPoint(x: self.bounds.size.width/2, y: self.bounds.size.height/2) bottomLayer.contents = NSImage(named: "bottom.jpg") bottomLayer.contentsGravity = .resize self.layer?.addSublayer(bottomLayer) let path = CGMutablePath() path.move(to: CGPoint(x: self.bounds.size.width/2, y: self.bounds.size.height/2)) path.addCurve(to: CGPoint(x: 0.5*self.bounds.size.width, y: self.bounds.size.height), control1: CGPoint(x: 0.4*self.bounds.size.width, y: 0), control2: CGPoint(x: 0, y: self.bounds.size.height)) path.addCurve(to: CGPoint(x: self.bounds.size.width/2, y: self.bounds.size.height/2), control1: CGPoint(x: self.bounds.size.width, y: self.bounds.size.height), control2: CGPoint(x: 0.8*self.bounds.size.width, y: 0)) path.closeSubpath() let maskLayer = CAShapeLayer() maskLayer.path = path maskLayer.fillRule = .evenOdd maskLayer.borderWidth = 20 let topLayer = CALayer() topLayer.bounds = self.bounds topLayer.position = CGPoint(x: self.bounds.size.width/2, y: self.bounds.size.height/2) topLayer.contents = NSImage(named: "top.jpg") topLayer.contentsGravity = .resize topLayer.masksToBounds = true topLayer.mask = maskLayer self.layer?.addSublayer(topLayer) } }

Espero que haya una buena solución a esto :)

Federico

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Intente agregar CAGradientLayer en lugar de CAShapeLayer :

Fuente de muestra:

 class MyView: NSView { override func draw(_ dirtyRect: NSRect) { let bottomLayer = CALayer() bottomLayer.bounds = self.bounds bottomLayer.position = CGPoint(x: self.bounds.size.width/2, y: self.bounds.size.height/2) bottomLayer.contents = NSImage(named: "bottom") bottomLayer.contentsGravity = .resize self.layer?.addSublayer(bottomLayer) let path = CGMutablePath() path.move(to: CGPoint(x: self.bounds.size.width/2, y: self.bounds.size.height/2)) path.addCurve(to: CGPoint(x: 0.5*self.bounds.size.width, y: self.bounds.size.height), control1: CGPoint(x: 0.4*self.bounds.size.width, y: 0), control2: CGPoint(x: 0, y: self.bounds.size.height)) path.addCurve(to: CGPoint(x: self.bounds.size.width/2, y: self.bounds.size.height/2), control1: CGPoint(x: self.bounds.size.width, y: self.bounds.size.height), control2: CGPoint(x: 0.8*self.bounds.size.width, y: 0)) path.closeSubpath() let maskLayer = CAGradientLayer() maskLayer.shadowRadius = 4 maskLayer.shadowPath = path maskLayer.shadowOpacity = 1 maskLayer.shadowOffset = CGSize.zero maskLayer.shadowColor = NSColor.green.cgColor let topLayer = CALayer() topLayer.bounds = self.bounds topLayer.position = CGPoint(x: self.bounds.size.width/2, y: self.bounds.size.height/2) topLayer.contents = NSImage(named: "top") topLayer.contentsGravity = .resize topLayer.masksToBounds = true topLayer.mask = maskLayer self.layer?.addSublayer(topLayer) } }

Producción

ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda