「SwiftUI」提高手势动作优先级

450 阅读1分钟
前言:UI控件有时会出现手势动作冲突,需要提高某些手势动作的优先级,如:双击点赞会与单击暂停所冲突,则需要提高双击点赞的优先级

使用的方法:

///firstGestureRecognizer为优先级低的手势动作
///secondGestureRecognizer为优先级高的手势动作
///方法介绍:当优先级高的手势失败时才会执行优先级低的手势动作
firstGestureRecognizer.require(toFail: secondGestureRecognizer)

方法使用:

  • 双击手势优先于单击手势
let doubleTap = UITapGestureRecognizer(target: self, action: #selector(doubleTapContentView))
doubleTap.numberOfTapsRequired = 2

let singleTap = UITapGestureRecognizer(target: self, action: #selector(singleTapContentView))

contentView.bgView.addGestureRecognizer(doubleTap)
contentView.bgView.addGestureRecognizer(singleTap)

singleTap.require(toFail: doubleTap)
  • Cell手势操作优先于UITableView/UIScrollView滑动操作
/// Cell中需要进行的设置:
var tapGesture: UITapGestureRecognizer!
var leftSwipeGesture: UISwipeGestureRecognizer!

tapGesture = UITapGestureRecognizer(target: self, action: #selector(tapBgView))
bgView.addGestureRecognizer(tapGesture)
 
leftSwipeGesture = UISwipeGestureRecognizer(target: self, action: #selector(swipeGestureAction(gesture:)))
leftSwipeGesture.direction = .left
bgView.addGestureRecognizer(leftSwipeGesture)

/// UIScrollView:
myScrollView.panGestureRecognizer.require(toFail: cell.tapGesture)
myScrollView.panGestureRecognizer.require(toFail: cell.leftSwipeGesture)

/// UITableView
myTableView.panGestureRecognizer.require(toFail: cell.tapGesture)
myTableView.panGestureRecognizer.require(toFail: cell.leftSwipeGesture)

整理不易,望大家多多点赞收藏!感谢大家!