不能停止SAConfettiView

时间:2018-09-15 23:01:28

标签: ios swift

我正在使用一个名为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()
}

2 个答案:

答案 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实例变量的声明。