首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >暂停和恢复CAEmitterLayer多次次数

暂停和恢复CAEmitterLayer多次次数
EN

Stack Overflow用户
提问于 2018-10-03 13:26:37
回答 1查看 200关注 0票数 2

我有一个CAEmitterLayer实例,我想暂停它,然后多次恢复()。

我已经找到了使用两个CAEmitterLayer扩展函数来完成此任务的各种方法:

代码语言:javascript
复制
public func pause() {
    speed = 0.0 // Freeze existing cells.
    timeOffset = convertTime(CACurrentMediaTime(), from: self)
    lifetime = 0.0 // Stop creating new cells.
}

代码语言:javascript
复制
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就会在时间上稍微向前跳。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-03 13:54:25

我需要在timeOffset方法中调整pause()。这是一个用于暂停和恢复CAEmitterLayer实例的工作扩展:

代码语言:javascript
复制
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.
    }

}

用作:

代码语言:javascript
复制
var emitterLayer = CAEmitterLayer()
/// Configure as required

emitterLayer.pause()
emitterLayer.resume()
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52628113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档