代码之家  ›  专栏  ›  技术社区  ›  Benjamin RD

在uilongpressgesturerecognizer中获得时间

  •  0
  • Benjamin RD  · 技术社区  · 7 年前

    我在努力争取时间 UIView 按下,使用 UILongPressGestureRecognizer

    但是,国家 press:UILongPressGestureRecognizer .began ,请 .end ,请 .cancelled ,请 .changed .

    但是,我想知道 x 按下秒以更改 视图 .

    我当前的代码是:

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

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

    1 回复  |  直到 7 年前
        1
  •  0
  •   jnblanchard    7 年前

    长按开始时,记下时间(开始)。当它取消、结束或失败时;可以选择从开始计算以秒为单位的距离。如果按下时间超过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
        }
      }
    }
    
    推荐文章