gpt4 book ai didi

ios - 多次暂停和恢复 CAEmitterLayer

转载 作者:搜寻专家 更新时间:2023-11-01 06:27:14 29 4
gpt4 key购买 nike

我有一个 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 都会及时略微向前跳跃。

有人能帮我解决这个跳跃问题吗?

最佳答案

我需要调整 pause() 方法中的 timeOffset。这是暂停和恢复 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()

关于ios - 多次暂停和恢复 CAEmitterLayer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52628113/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com