我正在写一个纸牌游戏。当用户用手触摸卡片时,他们正在触摸的卡片滑出一点,以澄清他们正在触摸哪一张,因为他们手中最多可以有18张卡片而且它们有点小。我接下来想要的是让用户能够刷卡以进行播放。
我尝试使用UISwipeGestureRecognizer
,但由于用户可能会在首次触摸屏幕时暂停(以确保正确的卡片滑出),因此通常无法将其识别为滑动。用户也可以将他的手指滑过相邻的卡然后滑动。所以,这是另一个问题,因为手势只能在UIView上识别触摸开始。
我能想到的最好的方法是在父视图上使用UIPanGestureRecognizer
(包含所有卡的UIView)。我可以使用它的速度来决定是否应该将其视为滑动。我必须将cancelsTouchesInView
设置为NO
,然后仍然只使用touchesBegan
等来检测哪张卡被刷过。还有更好的方法吗?
答案 0 :(得分:1)
如果我理解你正在尝试做什么,我会尝试将UILongPressureGestureRecognizer和UISwipeGestureRecognizer结合起来。
UILongPressGestureRecognizer是UIGestureRecognizer的具体子类,用于查找长按手势。用户必须在视图上按一个或多个手指至少指定的时间段才能发送动作消息。另外,手指可以仅移动指定距离以便识别手势;如果他们超出此限制,手势就会失败。
长按手势是连续的。当指定时间段(minimumPressDuration)按下允许的手指数(numberOfTouchesRequired)并且触摸不超出允许的移动范围(allowableMovement)时,手势开始(UIGestureRecognizerStateBegan)。每当手指移动时,手势识别器都会转换到更改状态,并且当任何手指抬起时,手势识别器会结束(UIGestureRecognizerStateEnded)。
UILongPressGestureRecognizer
将允许用户“挑选”该卡;如果他们移动手指太多(即,在一张连续的卡片上)手势就会失败。
在UIGestureRecognizerStateBegan
中,您可以设置一个变量来跟踪当前“已选择”的卡片(只要它仍然如此)。
如果用户随后在父视图(包含所有卡片的视图)上滑动,则会移动该卡片。
另一方面,我觉得在touchesBegan
/ touchesMoved
/ touchesEnded
方面实施起来并不复杂,这可能是最合适的方式处理它。
答案 1 :(得分:1)
正如我在评论中所说的那样,您可以通过子类化UIGestureRecognizer来制作自己的自定义滑动手势,而不是让UIPanGesture以正常的方式工作。
查看此链接。第一部分是关于一般手势,但下半部分是关于制作自定义手势。
http://www.raywenderlich.com/6567/uigesturerecognizer-tutorial-in-ios-5-pinches-pans-and-more