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 under.
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 under?
Questions
1 – How do I modify the emitter layer picture as soon as the CAEmitterLayer is added to a view ?
2 – How do I fully cease the CAEmitterLayer animation and take away it fully 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.colour = UIColor.orange.cgColor
myEmitterCell.contents = UIImage(named: "myImage2")!.cgImage
}
func myEmitter() {
myEmitterCell.birthRate = 1
myEmitterCell.colour = 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.dimension.width * 0.5), y: (view.bounds.dimension.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]