0

カードゲームを書いています。ユーザーが手札のカードに触れると、手札に最大18枚のカードを置くことができ、カードが小さいため、触れているカードが少しスライドして、どちらのカードに触れているかがわかります。次に欲しいのは、ユーザーがカードを上にスワイプして再生できるようにすることです。

を使用しようとしましたUISwipeGestureRecognizerが、ユーザーが最初に画面に触れたときに一時停止する可能性があるため(右側のカードがスライドアウトすることを確認するため)、スワイプとして認識されないことがよくあります。ユーザーは、指を隣接するカードにスライドさせてからスワイプすることもできます。つまり、ジェスチャはタッチが開始されたUIViewでのみ認識されるため、これは別の問題です。

私が考えることができる最善の方法はUIPanGestureRecognizer、親ビュー(すべてのカードを含むUIView)でを使用することです。その速度を使用して、スワイプと見なすかどうかを決定できます。どのカードがスワイプされたかを検出するには、設定cancelsTouchesInViewしてNO、それでもなどを使用する必要があります。touchesBeganもっと良い方法はありますか?

4

2 に答える 2

1

コメントで述べたように、UIPanGestureを通常の方法では機能させない代わりに、UIGestureRecognizerをサブクラス化することで、希望どおりに機能する独自のカスタムスワイプジェスチャを作成できます。

このリンクをチェックしてください。最初の部分は一般的なジェスチャに関するものですが、後半はカスタムジェスチャの作成に関するものです。

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

于 2012-06-25T17:53:50.433 に答える
1

あなたがやろうとしていることを正しく理解しているなら、UILongPressureGestureRecognizerとUISwipeGestureRecognizerを組み合わせて試してみます。

UILongPressGestureRecognizerは、UIGestureRecognizerの具体的なサブクラスであり、長押しのジェスチャを検索します。アクションメッセージを送信するには、ユーザーはビューを少なくとも指定された期間1本以上指で押す必要があります。さらに、ジェスチャが認識されるように、指は指定された距離だけ移動できます。この制限を超えて移動すると、ジェスチャは失敗します。

長押しのジェスチャは継続的です。ジェスチャは、許容される指の数(numberOfTouchesRequired)が指定された期間(minimumPressDuration)押され、タッチが許容される移動範囲(allowableMovement)を超えて移動しない場合に開始されます(UIGestureRecognizerStateBegan)。ジェスチャレコグナイザは、指が移動するたびに変更状態に移行し、いずれかの指を離すと終了します(UIGestureRecognizerStateEnded)。

UILongPressGestureRecognizerユーザーがカードを「選択」できるようにします。指を動かしすぎると(つまり、隣接するカードの上で)、ジェスチャは失敗します。

で、UIGestureRecognizerStateBegan現在「選択されている」カードを追跡する変数を設定できます(そのようなカードが残っている限り)。

次に、ユーザーが親ビュー(すべてのカードを含むビュー)をスワイプすると、カードが移動します。

一方で、これは//の観点から実装するのはそれほど複雑ではなく、これがそれに対処するための最も適切な方法である可能性があると私は感じていtouchesBeganます。touchesMovedtouchesEnded

于 2012-06-25T15:19:45.757 に答える