【问题标题】:What is the difference between Pan and Swipe in iOS?iOS 中的 Pan 和 Swipe 有什么区别?
【发布时间】:2012-03-27 22:27:52
【问题描述】:

听起来很简单 .. 按住触控板,移动手指,松开 .. 但不知何故没有触发滑动(而是触发了平移)

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

Pan 被上述序列识别。

UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] 
      initWithTarget:v action:@selector(handlePan:)];
[v addGestureRecognizer: panGesture];

如果pan被评论,滑动被相同的手势识别..这样,2个问题:

  • 那么平移和滑动有什么区别?
  • 如何在 iPhone 模拟器上模拟滑动?

【问题讨论】:

  • @rickster,如果我错了,请纠正我,但滑动使用四个方向,上、下、左、右,平移可以是任何方向。正确

标签: ios gesture-recognition gestures


【解决方案1】:

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

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

您应该能够使用委托方法gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer: 解决此冲突,或者通过使平移识别器依赖于带有requireGestureRecognizerToFail: 的滑动识别器而无需委托。

冲突解决后,您应该能够通过快速拖动鼠标来模拟单指滑动。 (虽然鼠标比你的手指更精确,但它比在设备上做真实的事情更挑剔。)可以通过按住 Option 和 Shift 键来完成两指平移/滑动。

【讨论】:

  • 不错的答案。但我不认为平移手势获胜是因为它更通用,而是因为它是连续手势(滑动是离散手势),因此在滑动之前识别出平移。滑动只在手指抬起时被识别,平移几乎在手指开始移动后立即被识别。在“为两个手势识别器声明特定顺序”下的事件 PG 中很好地介绍了滑动与平移。
【解决方案2】:

当您仅在特定方向(向上滑动、向下滑动、向左滑动、向右滑动)拖动手指时,滑动手势将起作用。例如表格视图控制器中的可滑动单元格。

当您向任何方向拖动手指时,平移手势将起作用。你可以给它加速或减速。例如,将一个物体从一个地方移动到另一个地方或旋转一个微调器..

【讨论】:

    【解决方案3】:

    根据http://hammerjs.github.io/,我认为区别在于:

    • 平移:在同一个大视图中移动方向
    • 滑动:在多个视图之间切换

    手势相同,都是用一根手指移动。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-18
      • 1970-01-01
      • 2017-05-02
      • 1970-01-01
      • 1970-01-01
      • 2018-12-09
      • 1970-01-01
      • 2011-02-26
      相关资源
      最近更新 更多