我有一个UILongPressGestureRecognizer,一段时间后似乎变得无响应。它似乎与时间流逝相关,并且可能与应用程序失去活动状态并进入后台有关。
当我第一次重新打开应用程序并尝试长按或滑动时,我经常遇到这个问题,但都不起作用。如果我转到其他视图控制器然后返回,则重新加载会导致手势识别器再次开始工作!
let longpress = UILongPressGestureRecognizer(target: self, action: #selector(ViewController.longPressGestureRecognized(_:)))
mainView.addGestureRecognizer(longpress)
关于处理手势识别器像这样变得无响应的任何想法?
请尝试以下方法。
- 使
longpress
成为全局变量 - 在
viewWillAppear
中添加手势(如果不存在( - 在
viewWillAppear
中添加通知以进行UIApplicationWillEnterForeground
- 删除
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)
}
}