2

カスタム ジェスチャ レコグナイザーを作成しています。私の目標は、ジェスチャの間、特定のしきい値を超える動きをログに記録し、ジェスチャの最後にそのデータ セットを報告することです。ジェスチャ認識オブジェクトが果たす役割について、私は少し曖昧です。

私はまだ OOP に少し慣れていないので、このジェスチャ認識エンジンを使用した MVC のベスト プラクティスについて疑問に思っています。具体的には、ジェスチャ レコグナイザは「ダム」でビュー コントローラにのみ移動を報告し、VC でロジックとロギングを実行する必要があります。ジェスチャが終了したらレポートを返し、VC がジェスチャ認識エンジンにデータを要求するようにします。

これは、私が現在プロトタイプを作成しているもののサンプルコードです (ロジックを持ち、ジェスチャ認識エンジンにログインするというアプローチを使用):

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    [super touchesMoved:touches withEvent:event];
    if (self.state == UIGestureRecognizerStateFailed) return;

    CGPoint nowPoint = [[touches anyObject] locationInView:self.view];
    int xMovement = nowPoint.x - self.previousPoint.x;
    int yMovement = nowPoint.y - self.previousPoint.y;

    if (xMovement >= 0) {
        // positive/no x movement, log points if x or y has movement above threshold
        if (xMovement > MovementThreshold || yMovement > MovementThreshold) {
            NSLog(@"Movement above the threshold!\nx: %f\ty: %f", nowPoint.x, nowPoint.y);
            self.previousPoint = nowPoint;
        }
    } else {
        // negative x movement
        self.state = UIGestureRecognizerStateFailed;
    }
}
4

3 に答える 3

1

ジェスチャ認識オブジェクトにログインします。このように見ています。

このジェスチャ レコグナイザーを他の場所でログに記録する場合、どうすればよいですか? ログがビュー コントローラーにある場合は、そのコードをカット アンド ペーストする必要があります。ロギングがジェスチャ レコグナイザにある場合は、ジェスチャ レコグナイザの新しいインスタンスを作成するだけです。

このビュー コントローラーからジェスチャ レコグナイザーを削除したい場合は、どうすればよいですか? 繰り返しますが、ロギング コードがビュー コントローラーにある場合は、さらに多くの作業が必要になります。

カプセル化により、コードをジェスチャ認識エンジンに保持したいことがわかります。

とはいえ、ジェスチャ レコグナイザーは単一のオブジェクトである必要はありません。それは小さなセットかもしれません。1 つはジェスチャ レコグナイザー自体用、1 つはログ記録用、もう 1 つはデータの保存用です。それは、各タスクの複雑さに大きく依存します。それぞれの新しいデータ ポイントが単一の数値を配列に追加するだけの場合、それを分割するのは時期尚早に思えますが、ジェスチャ レコグナイザー自体とは無関係に渡したいデータの場合は、分割する方がよい場合があります。それを出します。

間違った選択をしたと判断した場合、それがリファクタリングの目的です。:)

于 2012-09-19T13:52:24.590 に答える
1

ジェスチャー認識は、MVC のビュー コンポーネントの一部であると考えています。しかし、最終的には、ジェスチャでモデル データの表示に関して何かを行うことを意図している可能性があります。コントローラー層との対話を提供するデリゲート パターンを検討することもできます。

そのため、ジェスチャ レコグナイザーをホストするカスタム ビューは、デリゲート プロトコルを介してコントローラー レイヤーにモデルの影響を委任しながら、画面上のビュー関連の側面を処理できます。

于 2012-09-19T13:48:08.367 に答える
0

答えてくれてありがとう。

ここで使用するアプローチは、ジェスチャ レコグナイザーがジェスチャ レコグナイザーでどのように動作するかに関連するロジックを持ち、デリゲート パターンを使用して、データの完了後にデータを処理することです。

于 2012-09-19T21:50:28.793 に答える