ios – How To Change Contents Of A CAEmitterCell In A CAEmitterLayer Particle Emitter

[ad_1]

Background

I’ve a perform that creates a core animation emitter layer that animates myImage1, within the code beneath.

I wish to change myImage1 to myImage2 to myImage3 and again to myImage1 after a delay of 10 seconds or each time a button is tapped.

I’ve tried unsuccessfully. The code myEmitterChange() is executed however the picture doesn’t change within the core animation emitter layer. What must be corrected within the code beneath?


Questions

1 – How do I alter the emitter layer picture as soon as the CAEmitterLayer is added to a view ?

2 – How do I utterly cease the CAEmitterLayer animation and take away it solely from the view?


Code

import UIKit

class ViewController: UIViewController {

var myEmitterLayer = CAEmitterLayer()
var myEmitterCell = CAEmitterCell()

override func viewDidLoad() {
    
    myEmitter()
    
    self.carry out(#selector(self.myEmitterChange), with: nil, afterDelay: 10)

}

@objc func myEmitterChange() {
    
    print("Did I Change?")
    
    myEmitterCell.shade = UIColor.orange.cgColor
    myEmitterCell.contents = UIImage(named: "myImage2")!.cgImage
    
}


func myEmitter() {
        
    myEmitterCell.birthRate = 1
    myEmitterCell.shade = UIColor.blue.cgColor
    myEmitterCell.contents = UIImage(named: "myImage1")!.cgImage
    myEmitterCell.lifetime = 15
    myEmitterCell.scale = 0.25
    myEmitterCell.scaleSpeed = 0.025
    myEmitterCell.velocity = 50
    myEmitterCell.velocityRange = 50
    myEmitterCell.spin = -2

    myEmitterLayer.beginTime = CACurrentMediaTime()
    myEmitterLayer.birthRate = 1
    myEmitterLayer.emitterMode = CAEmitterLayerEmitterMode.define
    myEmitterLayer.emitterPosition = CGPoint(x: (view.bounds.measurement.width * 0.5), y: (view.bounds.measurement.top * 0.5))
    myEmitterLayer.emitterShape = CAEmitterLayerEmitterShape.circle
    myEmitterLayer.emitterSize = CGSize(width: 10, top: 10)
    myEmitterLayer.renderMode = CAEmitterLayerRenderMode.oldestLast
    myEmitterLayer.emitterCells = [myEmitterCell]

    view.layer.addSublayer(myEmitterLayer)
    
    }

}

[ad_2]

Leave a Reply