手势识别器在一段时间后无响应



我有一个UILongPressGestureRecognizer,一段时间后似乎变得无响应。它似乎与时间流逝相关,并且可能与应用程序失去活动状态并进入后台有关。

当我第一次重新打开应用程序并尝试长按或滑动时,我经常遇到这个问题,但都不起作用。如果我转到其他视图控制器然后返回,则重新加载会导致手势识别器再次开始工作!

let longpress = UILongPressGestureRecognizer(target: self, action: #selector(ViewController.longPressGestureRecognized(_:)))
mainView.addGestureRecognizer(longpress)

关于处理手势识别器像这样变得无响应的任何想法?

请尝试以下方法。

  1. 使longpress成为全局变量
  2. viewWillAppear中添加手势(如果不存在(
  3. viewWillAppear中添加通知以进行UIApplicationWillEnterForeground
  4. 删除viewWillDisappear中的手势和通知

像这样的东西

var longpress: UILongPressGestureRecognizer!
override viewDidLoad() {
super.viewDidLoad
longpress = UILongPressGestureRecognizer(target: self, action: #selector(ViewController.longPressGestureRecognized(_:)))
}
override viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
checkGestureAvailability()
NotificationCenter.default.addObserver(self, selector: #selector(checkGestureAvailability), name: Notification.Name.UIApplicationWillEnterForeground, object: nil)
}
override viewWillDisappear(_ animated: Bool) {
if mainView.gestureRecognizers.contains(longpress) {
mainView.removeGestureRecognizer(longpress)
}
NotificationCenter.default.removeObserver(self, name: Notification.Name.UIApplicationWillEnterForeground, object: nil)
super.viewWillDisappear(animated)
}
func checkGestureAvailability() {
if !mainView.gestureRecognizers.contains(longpress) {
mainView.addGestureRecognizer(longpress)
}
}

相关内容

最新更新