首页 > 解决方案 > Deinit UIImpactFeedbackGenerator

问题描述

UIImpactFeedbackGeneratorTimeInterval=1.0. 几秒钟后,我调用deinitHapticFeedback(),如下所述并导航到下一个视图控制器,但反馈并没有停止,并且在新的 VC 出现后持续出现大约十秒钟。

(另外,我试着打电话deinitHapticFeedback()viewWillDisappear(_ animated: Bool)但同样的事情发生了。)

您对 a 的更优化 deinit 函数有任何想法UIFeedbackGenerator吗?

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
}

提前致谢!

标签: iosswiftxcodehaptic-feedback

解决方案


UIImpactFeedbackGenerator每次generateHapticFeedback调用方法时,您都在创建一个新方法。因此,即使您设置feedbackGeneratornil,也会在此行创建一个新对象feedbackGenerator = UIImpactFeedbackGenerator(style: .medium)

而不是设置feedbackGeneratornil您使您的计时器无效。如果您使用Timer类来安排计时器,您可以像这样调用 invalidate 方法timer.invalidate()

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

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


推荐阅读