【问题标题】:Allow a delay before the swipe在滑动之前允许延迟
【发布时间】:2012-06-25 15:00:16
【问题描述】:

我正在写一个纸牌游戏。当用户触摸他们手中的卡片时,他们正在触摸的卡片会稍微滑出以明确他们正在触摸的是哪张卡片,因为他们手中最多可以有 18 张卡片,而且它们有点小。我接下来想要的是让用户能够向上刷卡来玩它。

我曾尝试使用UISwipeGestureRecognizer,但由于用户在第一次触摸屏幕时可能会暂停(以确保正确的卡片滑出),因此通常不会将其识别为滑动。用户也可以只是将他的手指滑到相邻的卡片上然后刷卡。所以,这是另一个问题,因为手势只能在触摸开始的 UIView 上被识别。

我能想到的最好的方法是在父视图(包含所有卡片的 UIView)上使用 UIPanGestureRecognizer。我可以使用它的速度来决定是否应该将其视为滑动。我必须将cancelsTouchesInView 设置为NO 并且仍然只使用touchesBegan 等来检测刷了哪张卡。有没有更好的办法?

【问题讨论】:

  • 而不是让 UIPanGesture 以可能不正常的方式工作。您可以通过继承 UIGestureRecognizer 来制作您自己的自定义滑动手势,按照您想要的方式工作。
  • 我最喜欢这个主意。好像是最干净的。我要去观看有关此的 WWDC 视频。谢谢。
  • 如果您倾向于将其标记为正确,我会提供一个带有自定义手势链接的答案 :)

标签: objective-c ios uigesturerecognizer gesture gesture-recognition


【解决方案1】:

正如我在评论中所说,您可以通过子类化 UIGestureRecognizer 来制作自己的自定义滑动手势,而不是让 UIPanGesture 以可能不正常的方式工作。

查看此链接。第一部分是关于一般手势,但后半部分是关于制作自定义手势。

http://www.raywenderlich.com/6567/uigesturerecognizer-tutorial-in-ios-5-pinches-pans-and-more

【讨论】:

    【解决方案2】:

    如果我正确理解您要做什么,我会尝试结合使用 UILongPressureGestureRecognizer 和 UISwipeGestureRecognizer。

    UILongPressGestureRecognizer 是 UIGestureRecognizer 的一个具体子类,用于查找长按手势。用户必须在视图上按下一根或多根手指至少指定时间段才能发送操作消息。另外,手指可以只移动指定的距离来识别手势;如果他们超出此限制,则手势失败。

    长按手势是连续的。当允许的手指数量 (numberOfTouchesRequired) 在指定的时间 (minimumPressDuration) 内被按下并且触摸没有超出允许的移动范围 (allowableMovement) 时,手势开始 (UIGestureRecognizerStateBegan)。每当手指移动时,手势识别器就会转换到 Change 状态,并在任何手指抬起时结束 (UIGestureRecognizerStateEnded)。

    UILongPressGestureRecognizer 将允许用户“挑选”卡片;如果他们移动手指太多(即,在连续的卡片上),则手势会失败。

    UIGestureRecognizerStateBegan 中,您可以设置一个变量来跟踪当前“挑选”的卡片(只要它保持不变)。

    如果用户随后在父视图(包含所有卡片的视图)上滑动,您将移动卡片。

    另一方面,我觉得这在touchesBegan/touchesMoved/touchesEnded 方面实现起来不会那么复杂,而且这可能是处理它的最合适的方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多