ios - Deinit UIImpactFeedbackGenerator
问题描述
我UIImpactFeedbackGenerator
用TimeInterval=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
}
提前致谢!
解决方案
UIImpactFeedbackGenerator
每次generateHapticFeedback
调用方法时,您都在创建一个新方法。因此,即使您设置feedbackGenerator
为nil
,也会在此行创建一个新对象feedbackGenerator = UIImpactFeedbackGenerator(style: .medium)
。
而不是设置feedbackGenerator
为nil
您使您的计时器无效。如果您使用Timer
类来安排计时器,您可以像这样调用 invalidate 方法timer.invalidate()
。
private func deinitHapticFeedback() {
timer.invalidate() // invalidate timer
}
当视图控制器再次出现时(如果需要),您也可以重新启动计时器。
推荐阅读
- c++ - 我可以在 std::move 之后重新使用像 std::vector 这样的复杂类吗?
- r - 对不同值的组合应用 foreach 循环
- razor - 从剃刀台上完全移除边框
- reporting-services - SSRS - 模拟用户
- c - 运行时错误 vs 内存泄漏 vs linkedit 错误
- angular - Filter() 运算符不会继续从 DOM 中删除对象
- flutter - 如何在收件人已知但发件人更改的情况下发送电子邮件?
- php - PHP 模板不起作用,我制作了一个 php 模板引擎,但无法将输出与 implode 合并
- c++ - 支持独立线程调度的 CUDA 自旋锁实现?
- ruby - 安装 pg 时出错,需要 Ruby 版本 >= 2.2,即使 ruby >=2.2