我有一个CAEmitterLayer实例,我想暂停它,然后多次恢复()。
我已经找到了使用两个CAEmitterLayer扩展函数来完成此任务的各种方法:
public func pause() {
speed = 0.0 // Freeze existing cells.
timeOffset = convertTime(CACurrentMediaTime(), from: self)
lifetime = 0.0 // Stop creating new cells.
}和
public func resume() {
speed = 1.0
beginTime = convertTime(CACurrentMediaTime(), from: self) - timeOffset
timeOffset = 0.0
lifetime = 1.0
}第一次使用emitterLayer.pause()和emitterLayer.resume()非常有效。
然而,从第二次开始,每当我使用emitterLayer.pause()时,emitterCells就会在时间上稍微向前跳。
有谁能帮我解决这个跳跃问题吗?
发布于 2018-10-03 13:54:25
我需要在timeOffset方法中调整pause()。这是一个用于暂停和恢复CAEmitterLayer实例的工作扩展:
extension CAEmitterLayer {
/**
Pauses a CAEmitterLayer.
*/
public func pause() {
speed = 0.0 // Freeze the CAEmitterCells.
timeOffset = convertTime(CACurrentMediaTime(), from: self) - beginTime
lifetime = 0.0 // Produce no new CAEmitterCells.
}
/**
Resumes a paused CAEmitterLayer.
*/
public func resume() {
speed = 1.0 // Unfreeze the CAEmitterCells.
beginTime = convertTime(CACurrentMediaTime(), from: self) - timeOffset
timeOffset = 0.0
lifetime = 1.0 // Produce CAEmitterCells at previous rate.
}
}用作:
var emitterLayer = CAEmitterLayer()
/// Configure as required
emitterLayer.pause()
emitterLayer.resume()https://stackoverflow.com/questions/52628113
复制相似问题