ios swift sprite-kit caemitterlayer

ios - ¿Cómo establecer el fondo CAEmitterLayer transparente?



swift sprite-kit (3)

var emitter = CAEmitterLayer() emitter.emitterPosition = CGPoint(x: self.view.frame.size.width / 2, y: -10) emitter.emitterShape = kCAEmitterLayerLine emitter.emitterSize = CGSize(width: self.view.frame.size.width, height: 2.0) emitter.emitterCells = generateEmitterCells() self.view.layer.addSublayer(emitter)

aquí, CAEmitterLayer cubre mi vista ... el contenido de self.view no está visible ...

Árbitro. código: https://oktapodi.github.io/2017/05/08/particle-effects-in-swift-using-caemitterlayer.html

Quiero configurar esta animación en mi vista.


Está funcionando bien la salida de verificación de mi simulador. Las imágenes de fondo se agregan desde el guión gráfico y el color azul se hace por código. Sigue trabajando bien.

SALIDA:


No sé si entiendo que es correcto, pero si este es el efecto que está buscando:

Entonces necesitas hacer lo siguiente:

  1. Agregue una "vista de contenedor" para que su emisor viva en
  2. Crea una salida para esa vista
  3. establecer clipsToBounds en verdadero para su vista de contenedor

Aquí está mi ViewController que produjo la captura de pantalla anterior

import UIKit enum Colors { static let red = UIColor(red: 1.0, green: 0.0, blue: 77.0/255.0, alpha: 1.0) static let blue = UIColor.blue static let green = UIColor(red: 35.0/255.0 , green: 233/255, blue: 173/255.0, alpha: 1.0) static let yellow = UIColor(red: 1, green: 209/255, blue: 77.0/255.0, alpha: 1.0) } enum Images { static let box = UIImage(named: "Box")! static let triangle = UIImage(named: "Triangle")! static let circle = UIImage(named: "Circle")! static let swirl = UIImage(named: "Spiral")! } class ViewController: UIViewController { @IBOutlet weak var emitterContainer: UIView! var emitter = CAEmitterLayer() var colors:[UIColor] = [ Colors.red, Colors.blue, Colors.green, Colors.yellow ] var images:[UIImage] = [ Images.box, Images.triangle, Images.circle, Images.swirl ] var velocities:[Int] = [ 100, 90, 150, 200 ] override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) view.backgroundColor = UIColor.red emitter.emitterPosition = CGPoint(x: emitterContainer.frame.size.width / 2, y: -10) emitter.emitterShape = kCAEmitterLayerLine emitter.emitterSize = CGSize(width: emitterContainer.frame.size.width, height: 2.0) emitter.emitterCells = generateEmitterCells() emitterContainer.layer.addSublayer(emitter) emitterContainer.clipsToBounds = true } private func generateEmitterCells() -> [CAEmitterCell] { var cells:[CAEmitterCell] = [CAEmitterCell]() for index in 0..<16 { let cell = CAEmitterCell() cell.birthRate = 4.0 cell.lifetime = 14.0 cell.lifetimeRange = 0 cell.velocity = CGFloat(getRandomVelocity()) cell.velocityRange = 0 cell.emissionLongitude = CGFloat(Double.pi) cell.emissionRange = 0.5 cell.spin = 3.5 cell.spinRange = 0 cell.color = getNextColor(i: index) cell.contents = getNextImage(i: index) cell.scaleRange = 0.25 cell.scale = 0.1 cells.append(cell) } return cells } private func getRandomVelocity() -> Int { return velocities[getRandomNumber()] } private func getRandomNumber() -> Int { return Int(arc4random_uniform(4)) } private func getNextColor(i:Int) -> CGColor { if i <= 4 { return colors[0].cgColor } else if i <= 8 { return colors[1].cgColor } else if i <= 12 { return colors[2].cgColor } else { return colors[3].cgColor } } private func getNextImage(i:Int) -> CGImage { return images[i % 4].cgImage! } }

Espero que te ayude


Puede solucionar su problema cambiando la forma en que agrega la capa en este momento su adición sobre todo lo que a veces oculta otras capas y objetos.

cambio

self.view.layer.addSublayer(emitter)

A

self.view.layer.insertSublayer(emitter, at: 0)