在iOS中Pan和Swipe有什么区别?

Jam*_*sev 126 gesture-recognition gestures ios

听起来很简单.按住触控板,移动手指,释放 ..但不知何故滑动没有被触发(平移被触发)

UISwipeGestureRecognizer *swipeGesture = [[UISwipeGestureRecognizer alloc] 
      initWithTarget:v action:@selector(handleSwipe:)];
swipeGesture.direction= UISwipeGestureRecognizerDirectionUp;
[v addGestureRecognizer:swipeGesture];
Run Code Online (Sandbox Code Playgroud)

Pan被上述序列识别.

UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] 
      initWithTarget:v action:@selector(handlePan:)];
[v addGestureRecognizer: panGesture];
Run Code Online (Sandbox Code Playgroud)

如果评论了平移,则通过相同的手势识别滑动.有了这个,2个问题:

  • 平底锅和滑动之间有什么区别?
  • 如何在iPhone模拟器上模拟滑动?

ric*_*ter 227

根据定义,滑动手势也必然是平移手势 - 两者都涉及触摸点的平移运动.不同之处在于识别器语义:平移识别器查找平移运动的开始并继续报告随时间在任何方向上的移动,而滑动识别器立即决定用户的触摸是否在所需方向上线性移动.

默认情况下,没有两个识别器会识别相同的手势,因此平移和滑动之间存在冲突.最有可能的是,你的pan识别器会"赢得"冲突,因为它的手势更简单/更通用:滑动是一个平移但是平移可能不是一个轻扫,因此平移首先识别并排除其他识别器.

您应该能够使用委托方法解决此冲突gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:,或者通过使平移识别器依赖于滑动识别器来解决此冲突requireGestureRecognizerToFail:.

解决冲突后,您应该可以通过快速拖动鼠标来模拟单指滑动.(尽管由于鼠标比手指更精确,但它比在设备上做真实的东西更加挑剔.)可以通过按住Option和Shift键来完成双指平移/滑动.

  • 很好的答案.但我不认为平移手势会因为它更通用而获胜,而是因为它是一个连续的手势(滑动是一个离散的手势)所以在滑动之前识别平移.仅在被抬起的手指上识别滑动,在手指开始移动后几乎立即识别平移.在"声明两个手势识别器的特定顺序"下的事件PG中,可以很好地覆盖滑动与平移. (22认同)

Day*_*vin 27

只在某些方向上拖动手指时,滑动手势才会起作用(向上滑动,向下滑动,向左滑动,向右滑动).例如,表视图控制器中的可滑动单元格.

当您向任何方向拖动手指时,Pan Gesture都会工作.您可以给它加速或减速.举个例子,将一个物体从一个地方移动到另一个地方或旋转一个旋转器.