- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试使用 CAEmitterLayer
和几个 CAEmitterCell
制作爆炸动画。这应该在用户看到 View 后的短暂延迟后发生。我在 viewDidAppear
中开始我的动画。
粒子动画本身工作正常,但正如这个问题 Initial particles from CAEmitterLayer don't start at emitterPosition除非我设置 emitterLayer.beginTime = CACurrentMediaTime()
动画在用户看来已经运行了一段时间。
现在要真正实现爆炸,我必须在某个时刻停止发射粒子。我尝试使用这段代码来设置 CABasicAnimation
,它会在一段时间后停止发射器:
// emitter layer is reused (remove all animations, remove all cells, remove from superlayer)
... // emitter layer setup in a function "explode" which is called from viewDidAppear
emitterLayer.beginTime = CACurrentMediaTime()
let birthRateAnimation = CABasicAnimation(keyPath: "birthRate")
birthRateAnimation.toValue = 0
birthRateAnimation.timingFunction = CAMediaTimingFunction.init(name:kCAMediaTimingFunctionEaseOut)
birthRateAnimation.beginTime = CACurrentMediaTime() + 1
birthRateAnimation.duration = 5
birthRateAnimation.delegate = self // (self is view controller)
birthRateAnimation.setValue("expl", forKey: "animName")
emitterLayer.add(birthRateAnimation, forKey: "birthRateAnimation")
self.view.layer.addSublayer(emitterLayer)
所以现在使用这段代码 birthRateAnimation
实际上并没有被触发。我登录了 animationDidStop
和 animationDidStart
,它们不打印任何内容。
现在,如果我在点击按钮时调用 explode
函数,我根本看不到没有粒子动画,但在日志中我看到“动画开始”/“动画停止”消息.
知道为什么吗?
最佳答案
我发现了两个导致动画无法正常工作的问题。
birthRate
上,但是 CAEmitterLayer
没有 birthRate
属性; CAEmitterCell
确实如此。为您的 CAEmitterCell
命名并将 CABasicAnimation(keyPath: "birthRate")
更改为 CABasicAnimation(keyPath: "emitterCells.cellName.birthRate")
CACurrentMediaTime() + 1.0
不会执行您想要的操作,因为发射器层有自己的时间尺度。将其更改为 emitterLayer.convertTime(CACurrentMediaTime(), from: nil) + 1.0
即可满足您的需求。关于ios - 如果为其设置了 beginTime,CAEmitterLayer 不会添加基本动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43096533/
我正在尝试使用 CAEmitterLayer 和几个 CAEmitterCell 制作爆炸动画。这应该在用户看到 View 后的短暂延迟后发生。我在 viewDidAppear 中开始我的动画。 粒子
我正在尝试让 CAEmitterLayer 和 CAEmitterCell 从它们父级持续时间中间的某个地方开始它们的动画。这可能吗?我尝试使用 beginTime 和 timeOffset 属性,但
我想要做的是使用资源定义我的动画的所有开始时间。 例如,我想要: ... ... 显然 sys:TimeSpan 不是正确使用的类型。如何定义我的资源,以便在定义动画时将其作为资源引用? 我也想纯
我是一名优秀的程序员,十分优秀!