我用TimeInterval=1.0初始化了一个带有计时器的UIImpactFeedbackGenerator。几秒钟后,我调用deinitHapticFeedback(),如下所述,并导航到下一个视图控制器,但是反馈并没有停止,而是在新VC出现后持续了大约10秒。
(另外,我尝试在viewWillDisappear(_ animated: Bool)中调用deinitHapticFeedback(),但也发生了同样的事情。)
你有更好的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
}提前感谢!?
发布于 2020-05-31 16:44:07
每次调用generateHapticFeedback方法时,都会创建一个新的UIImpactFeedbackGenerator。因此,即使将feedbackGenerator设置为nil,也会在feedbackGenerator = UIImpactFeedbackGenerator(style: .medium)这一行创建一个新对象。
不是将feedbackGenerator设置为nil,而是使计时器无效。如果你使用Timer类来调度计时器,你可以像这样调用timer.invalidate()中的invalidate方法。
private func deinitHapticFeedback() {
timer.invalidate() // invalidate timer
}当视图控制器再次出现时,您也可以重新启动计时器(如果需要)。
https://stackoverflow.com/questions/62106442
复制相似问题