2017-03-15 64 views
0

我正在尝试设置CAEmitter。所有这些都有效,但我想在一秒钟之后将birthRate更改为零,以便动画停止并且不会产生新的粒子。这里是我目前的代码:无法更改CAEmitter的属性SWIFT

import PlaygroundSupport 
import UIKit 

let view = UIView(frame: CGRect(x: 0, y: 0, width: 500, height: 500)) 

let emitterLayer = CAEmitterLayer() 

func degreesToRadians(degrees: Double) -> CGFloat { 
    return CGFloat(degrees * M_PI/180.0) 
} 

emitterLayer.emitterPosition = CGPoint(x: 320, y: 150) 

let cell = CAEmitterCell() 
cell.birthRate = 100 
cell.lifetime = 1 
cell.velocity = 300 
cell.scale = 0.1 

cell.contents = #imageLiteral(resourceName: "Lock copy.png").cgImage 

let zeroDegreesInRadians = degreesToRadians(degrees: 0.0) 
cell.spin = degreesToRadians(degrees: 130.0) 
cell.spinRange = zeroDegreesInRadians 
cell.emissionRange = degreesToRadians(degrees: 100) 

cell.xAcceleration = -800.0 
cell.yAcceleration = 1000.0 

emitterLayer.emitterCells = [cell] 

let delayTime = DispatchTime.now() + Double(Int64(1.0 * Double(NSEC_PER_SEC)))/Double(NSEC_PER_SEC) 
DispatchQueue.main.asyncAfter(deadline: delayTime, execute:{ 
    cell.birthRate = 0 
}) 

view.layer.addSublayer(emitterLayer) 

let page = PlaygroundPage.current 
page.needsIndefiniteExecution = true 
page.liveView = view 

我看不到任何效果,为什么我的代码不工作?另外我将如何添加一个CABasicAnimation来改变属性。 CAEmitterCell没有像.add(anim: CAAnimation, forKey: String)这样的方法。它会被添加到图层吗? 感谢您的帮助。

+0

如何使用定时器呢?每次计时器启动时,您可以减少一定的出生率 – JoRa

+0

为什么我的代码不会一次性降低出生率? – Lenny1357

+0

你的代码是否会降低实际被调用的出生率?你初始化'delayTime'的方式似乎很简单。 –

回答

0

你应该设置emitterLayer的birthRate为零。

或者,您也可以使用emitterLayer的使用寿命为零。