ale*_*wis 1 core-animation ios caemitterlayer swift
我有一个CAEmitterLayer实例,我想暂停然后多次恢复。
我找到了使用两个CAEmitterLayer扩展函数执行此操作的各种方法:
public func pause() {
speed = 0.0 // Freeze existing cells.
timeOffset = convertTime(CACurrentMediaTime(), from: self)
lifetime = 0.0 // Stop creating new cells.
}
Run Code Online (Sandbox Code Playgroud)
和
public func resume() {
speed = 1.0
beginTime = convertTime(CACurrentMediaTime(), from: self) - timeOffset
timeOffset = 0.0
lifetime = 1.0
}
Run Code Online (Sandbox Code Playgroud)
第一次使用emitterLayer.pause(),emitterLayer.resume()效果很好。
但是,从第二次开始,每当我使用时emitterLayer.pause(),emitterCells时间都会稍微向前跳跃。
请问有人可以帮我解决这个跳跃问题吗?
我需要调整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.
}
}
Run Code Online (Sandbox Code Playgroud)
用于:
var emitterLayer = CAEmitterLayer()
/// Configure as required
emitterLayer.pause()
emitterLayer.resume()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
138 次 |
| 最近记录: |