Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

358
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda