在 UILongPressGestureRecognizer 中获取按下的时间

Get time pressed in UILongPressGestureRecognizer

我正在尝试获取按下 UIView 的时间,使用 UILongPressGestureRecognizer

但是,press:UILongPressGestureRecognizer的状态是.began.end.cancelled.changed

但是,我想知道是否按下了 x 秒来更改 UIView 的控制。

我当前的代码是:

 override func viewDidLoad() {
        super.viewDidLoad()

        let longPressRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(NavigationViewController.displayDebugger(_:)))
        self.view.addGestureRecognizer(longPressRecognizer)

    }

    @objc public func displayDebugger(_ press:UILongPressGestureRecognizer){
        if press.state == .began{
            startDate = Date()
        }
        else if press.state == .ended{
            endDate = Date()

            let components = Calendar.current.dateComponents([.second], from: startDate, to: endDate)
            if(components.second! >= 1){
                let debugger = LogView()
                debugger.loadRequests()
            }

        }
    }

但是,我找不到知道时间紧迫的方法。 有办法做到吗?

当长按开始时,记下时间(开始)。当它取消、完成或失败时;可选地以秒为单位计算从开始的距离。如果按下持续时间超过 5 秒,则 myView 为红色。

class MyViewController : UIViewController {

  var start: Date?

  override func loadView() {
    view = UIView()
    view.isUserInteractionEnabled = true
    view.addGestureRecognizer(UILongPressGestureRecognizer(target: self, action: #selector(tap)))
  }

  @objc func tap(gr: UILongPressGestureRecognizer) {
    switch gr.state {
    case .began:
      start = Date()
    case .failed, .cancelled, .ended:
      guard let temp = start else { return }
      let seconds = Date().timeIntervalSince(temp)
      if seconds > 5 { myView.backgroundcolor = UIColor.red }
      print(seconds)
    default:
      break
    }
  }
}