6

UILongPressGestureRecognizerコントローラーの にが接続されていviewます。ユーザーが指を離すまで、いくつかのタイマーをフリーズしたい。問題は、タッチイベントがいつ終了したかを判断できないことです。ジェスチャ認識エンジンのプロパティでオブザーバーを使用する必要がありますstateか? または、これを行う他の方法はありますか?

簡単に

コントローラーのview上にUIScrollView(ページギャラリーを実装したもの)を配置すると、ドラッグ(スワイプ)でページを切り替えることができます。またUITapGestureRecognizer、コントローラのviewに接続されている もあり、他のタスクを処理します。

4

1 に答える 1

26

はい、レコグナイザーの状態を見ることでこれを達成できますが、オブザーバーを使用する必要はありません。レコグナイザーが起動したときに呼び出されるジェスチャ レコグナイザーのデリゲートで、アクション メソッドを宣言する必要があります。このメソッドは、レコグナイザーの状態が変化するたびに自動的に呼び出されます。

タイマーを開始するには UIGestureRecognizerStateBegan の状態を探す必要があり、タイマーを一時停止するには UIGestureRecognizerStateEnded、UIGestureRecognizerStateFailed、および UIGestureRecognizerStateCancelled の状態を探す必要があります。

ジェスチャを Interface Builder のアクションに接続するだけです。

-(IBAction)longPressBegan:(UILongPressGestureRecognizer *)recognizer
{
    if (recognizer.state == UIGestureRecognizerStateBegan)
    {
        // Long press detected, start the timer
    }
    else
    {
        if (recognizer.state == UIGestureRecognizerStateCancelled
            || recognizer.state == UIGestureRecognizerStateFailed
            || recognizer.state == UIGestureRecognizerStateEnded)
        {
            // Long press ended, stop the timer
        }
    }
}
于 2013-01-16T19:27:41.197 に答える