取消初始化 UImpactFeedbackGenerator

Deinit UIImpactFeedbackGenerator

我用定时器 TimeInterval=1.0 初始化了一个 UIImpactFeedbackGenerator。几秒钟后,我调用 deinitHapticFeedback(),如下所述并导航到下一个视图控制器,但反馈并没有停止,并在新的 VC 出现后持续发生大约十秒钟。

(另外,我尝试在 viewWillDisappear(_ animated: Bool) 中调用 deinitHapticFeedback(),但同样的事情发生了。)

对于 UIFeedbackGenerator 的更优化的 deinit 函数,您有什么想法吗?

private var feedbackGenerator: UIImpactFeedbackGenerator? = nil

private func generateHapticFeedback() {
    feedbackGenerator = UIImpactFeedbackGenerator(style: .medium)
    feedbackGenerator?.prepare()
    DispatchQueue.main.async {
        self.feedbackGenerator?.impactOccurred()
    }
}

private func deinitHapticFeedback() {
    feedbackGenerator = nil
}

提前致谢!

每次调用 generateHapticFeedback 方法时,您都会创建一个新的 UIImpactFeedbackGenerator。所以即使你将feedbackGenerator设置为nil,也会在feedbackGenerator = UIImpactFeedbackGenerator(style: .medium)这一行创建一个新的对象。

您没有将 feedbackGenerator 设置为 nil,而是使您的计时器无效。如果您使用 Timer class 来安排计时器,您可以像这样调用 invalidate 方法 timer.invalidate().

private func deinitHapticFeedback() {
    timer.invalidate() // invalidate timer
}

您也可以在视图控制器再次出现时重新启动计时器(如果需要)。