首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以暂停一个CAEmitterLayer吗?

可以暂停一个CAEmitterLayer吗?
EN

Stack Overflow用户
提问于 2018-10-03 08:57:47
回答 1查看 390关注 0票数 0

我有一个CAEmitterLayer实例,它发出一些CAEmitterCells。我想知道,是否有可能暂停这一层,这样就不会产生新的CAEmitterCells,并且已经产生的那些仍然固定在屏幕上的位置上?然后,当CAEmitterLayer实例“未暂停”时,屏幕上的固定CAEmitterCells再次开始移动。

谢谢你的帮忙。

编辑

设置:

代码语言:javascript
复制
emitterLayer.speed = 0.1

如果emitterLayerCAEmitterLayer子类的一个实例,那么只需就可以从视图中完全删除该层。

设置:

代码语言:javascript
复制
emitterLayer.lifetime = 0.0

just 将停止生产任何新的,但不会将现有的“冻结”在当前的位置。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-03 09:04:22

您可以将CAEmitterLayerCAEmitterLayer属性设置为0,这将导致新发出的单元格甚至不会呈现,但将使已经存在的单元格不受影响。当你想“不暂停”你的发射器层,你可以简单地重置lifetime到任何暂停之前它。

要冻结现有的单元格,还可以将speed设置为0,还可以添加timeOffset

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

然后您就可以像emitterLayer.pause()一样简单地调用它

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

https://stackoverflow.com/questions/52623296

复制
相关文章

相似问题

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