我正在使用一个名为SAConfettiView的第三方库。 (https://github.com/sudeepag/SAConfettiView)
我无法弄清楚为什么我不能停止SAConfettiView动画。我只启动一次。
这是我启动和停止SAConfettiView的代码。
func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
perform(#selector(confetti), with: nil, afterDelay: 0)
}
@objc public func confetti(){
let confettiView = SAConfettiView(frame: self.view.bounds)
confettiView.type = .Diamond
view.addSubview(confettiView)
confettiView.startConfetti()
perform(#selector(stopConfetti), with: nil, afterDelay: 4)
}
@objc public func stopConfetti(){
confettiView.stopConfetti()
confettiView.removeFromSuperview()
}
答案 0 :(得分:1)
问题是这一行:
'markersize', 3, 'marker', 's'
删除单词let confettiView = SAConfettiView(frame: self.view.bounds)
,一切都会好起来的。
答案 1 :(得分:1)
正如Matt在回答中所说,问题出在函数let confettiView = SAConfettiView(frame: self.view.bounds)
中的行confetti()
上。
let
一词告诉编译器confettiView
是一个新的局部变量,仅存在于当前函数的范围之内。它不会设置假定您已经在视图控制器中定义的实例变量confettiView
。
由于在函数内部创建了新的局部变量confettiView
,因此实例变量confettiView
为nil,因此对confettiView.stopConfetti()
的调用失败。
实际上,您的stopConfetti()
函数如何编译尚不清楚。如果confettiView是一个隐式展开的可选内容(如通常的出口一样),则应崩溃。
向我们显示您的confettiView
实例变量的声明。