0

我在写卡片游戏。当用户用手触摸卡片时,他们触摸的卡片会滑出一点,以澄清他们触摸哪一张卡片,因为他们手中最多可以有18张卡片,并且它们很小。接下来我想要的是用户能够刷卡来播放它。在刷卡前允许延迟

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

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

+0

而不是使UIPanGesture工作在什么可能不是一个正常的方式。您可以通过继承UIGestureRecognizer来创建自己的自定义滑动手势,该手势可以按照您的方式工作。 –

+0

我最喜欢这个想法。这似乎是最干净的。我即将观看WWDC上的视频。谢谢。 – dontangg

+0

如果您倾向于将其标记为正确,我会在自定义手势上提供一个很好的链接:) –

回答

1

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

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

长按手势是连续的。当在指定的时间段(minimumPressDuration)按下允许的手指的数量(numberOfTouchesRequired)并且触摸不超过允许的移动范围(allowableMovement)时,手势开始(UIGestureRecognizerStateBegan)。手指移动时,手势识别器转换到“更改”状态,并且当任何手指抬起时手势识别器结束(UIGestureRecognizerStateEnded)。

UILongPressGestureRecognizer将允许用户“挑选”该卡;如果他们太多地移动手指(即,通过连续的卡),手势失败。

UIGestureRecognizerStateBegan你可以设置一个变量来跟踪当前“拾取”的卡(只要它仍然是这样)。

如果用户在父视图上滑动(包含所有卡片的视图),则需要移动卡片。

在另一方面,我有一种感觉,这不会是复杂,在touchesBegan/touchesMoved/touchesEnded条款执行,而这可能是对付它最合适的方式。