斯威夫特:Pan&LongPress识别器同时出现

Kas*_*hif 3 xcode pan ios long-press swift

我在viewController类级别定义了longPress和Pan手势识别器,如下所示:

var touch = UILongPressGestureRecognizer()
var pan = UIPanGestureRecognizer()
Run Code Online (Sandbox Code Playgroud)

然后我创建一个简单的UIView:

let qBox = UIView()
qBox.frame = CGRect(x: 100, y: 200, width: 50, height: 50)
self.view.addSubview(qBox)
Run Code Online (Sandbox Code Playgroud)

然后我配置并添加我的识别器:

touch.addTarget(self, action: "ourTouched:")
touch.minimumPressDuration = 0
touch.numberOfTouchesRequired = 1
touch.numberOfTapsRequired = 0
qBox.addGestureRecognizer(touch)

pan.addTarget(self, action:"pan:")
pan.maximumNumberOfTouches = 1
pan.minimumNumberOfTouches = 1
self.view.addGestureRecognizer(pan)
Run Code Online (Sandbox Code Playgroud)

现在,当我触摸qBox UIView时,它会触发"ourTouched"方法但是如果我继续按住然后开始平移,它将不会拖动qBox UIView.我尝试在我的"ourTouched"函数中添加以下行,以便在用户触摸qBox UIView时立即删除长按识别器:

qBox.removeGestureRecognizer(touch)
Run Code Online (Sandbox Code Playgroud)

但是,在第一次触摸和拖动时,只会调用长按方法.我必须放手,然后再次开始平移.我错过了什么?

Ian*_*ald 7

一个添加UIGestureRecognizerDelegate到您的识别,并使其返回YESshouldRecognizeSimultaneously.

{
  // setup ...
  touch.delegate = self
}

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
  return (gestureRecognizer == touch && otherGestureRecognizer == pan)
}
Run Code Online (Sandbox Code Playgroud)