【问题标题】:Gesture Recognizer Unresponsive After Time手势识别器在时间后无响应
【发布时间】:2017-08-16 10:58:20
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您是否在 viewWillDisappear 或 viewDidDisappear 中禁用 userInteraction 或移除手势?
  • 你在哪个方法中执行mainView.addGestureRecognizer(longpress)
  • 你能添加更多代码吗——至少是你设置它的方法。
  • ViewController 中的哪个方法包含您问题中所述的代码?
  • @SaiLi 我没有实现任何 viewWillDisappear 或 didDisappear,所以没有,任何时候都没有禁用任何东西。

标签: ios swift uigesturerecognizer


【解决方案1】:

尝试以下方法。

  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)
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    相关资源
    最近更新 更多