【问题标题】:Deinit UIImpactFeedbackGeneratorDeinit UIImpactFeedbackGenerator
【发布时间】:2020-05-30 17:45:49
【问题描述】:

我使用带有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
}

提前致谢! ????

【问题讨论】:

    标签: ios swift xcode haptic-feedback


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 2021-05-16
      • 2015-11-24
      • 2016-06-02
      • 2017-06-25
      • 2015-01-14
      相关资源
      最近更新 更多