繁体   English   中英

Swift:如何检测平移手势何时被取消/取消?

[英]Swift: How to detect when pan gesture is dismissed / cancelled?

我有一个可滑动的自定义表格单元。 我正在使用此库继承自: https : //github.com/alikaragoz/MCSwipeTableViewCell

为了防止同时擦除2个单元格,我有一个全局布尔值,当某件事被擦除时,我只切换true / false

但是,当用户开始滑动但放开时,我找不到任何回调,这实际上取消了滑动。 有没有办法做到这一点? 我正在寻找类似于gestureRecognizerShouldBegin的回调,但是当手势被取消/取消时。

typealias SwipeHandler = () -> ()

class OrderCellManager {
  static var swiping = false
}

class OrderPreparingTableViewCell: MCSwipeTableViewCell {
  override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
    if (!OrderCellManager.swiping) {
      OrderCellManager.swiping = true
      return true
    } else {
      return false
    }
  }

  func displayOrder(order: AppState.Order, clock: Clock, fDone: @escaping SwipeHandler, fDelete: @escaping SwipeHandler) -> OrderPreparingTableViewCell {
    ..
    self.setSwipeGestureWith(lSwipe, color: Config.ColorSwipeDelete, mode: .exit, state: .state1, completionBlock:currySwipe(f: fDelete))
    self.setSwipeGestureWith(rSwipe, color: Config.ColorSwipeDone, mode: .exit, state: .state3, completionBlock:currySwipe(f: fDone))
    ..
  }

  // MARK: Private

  private func currySwipe(f: @escaping SwipeHandler) -> MCSwipeCompletionBlock {
    return { (a: MCSwipeTableViewCell?, b: MCSwipeTableViewCellState, c: MCSwipeTableViewCellMode) -> () in
      OrderCellManager.swiping = false

      f()
    }
  }

}
func pan(gesture: UIPanGestureRecognizer) {
        switch gesture.state {
        case .changed: fallthrough
        case .ended:
            // update anything that depends on the pan gesture using translation.x and .y
        case .cancelled:
            //do your thing here
        default: break
        }
    }

在您的viewDidLoad方法中添加此代码

self.addGestureRecognizer(UIPanGestureRecognizer(
            target: view,action:#selector(MCSwipeTableViewCell.pan(gesture:))
))

可能是这样的:

if gesture.state == UIGestureRecognizerState.Ended { //code }

我最终做到了这一点,可以通过我正在使用的表格单元格窗格来使用:

class OrderTableManager {
  static var swiping = false
}

class OrderPreparingTableViewCell: MCSwipeTableViewCell, MCSwipeTableViewCellDelegate {
  override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
    if !OrderTableManager.swiping {
      OrderTableManager.swiping = true
      return true
    } else {
      return false
    }
  }

  // MARK: Public
  func swipeTableViewCellDidEndSwiping(_ cell: MCSwipeTableViewCell!) {
    OrderTableManager.swiping = false
  }

  func displayOrder(order: AppState.Order, clock: Clock, fDone: @escaping SwipeHandler, fDelete: @escaping SwipeHandler) -> OrderPreparingTableViewCell {
    ...

    self.delegate = self

    ...
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM