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條款執行,而這可能是對付它最合適的方式。