取消初始化 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
}
您也可以在视图控制器再次出现时重新启动计时器(如果需要)。
我用定时器 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
}
您也可以在视图控制器再次出现时重新启动计时器(如果需要)。