1

スワイプを実行した方向を認識し、ビュー上のどのオブジェクトがそれを送信したかを知る必要があります。私は今のところ回避策を見つけましたが、それは複雑で巨大に見えるので、最も簡単な解決策はないでしょうか?いくつかの言葉で私の回避策:

  1. ビュー上のすべてのUIButtonオブジェクトにレコグナイザーをアタッチしました。
  2. スワイプの実行中にどのボタンがタップされたかを示すインジケーターがあります
  3. このインジケーターを確認し、方向をスワイプして正しい判断を下す必要があります。どのオブジェクトとどの方向に移動する必要がありますか。

アドバイスありがとうございます。

@synthesize swipeDirection; //スワイプ方向を示すラベル
@synthesize buttonNumber; //タップされているボタンの数を示すラベル

    -(void)viewDidLoad
    {{
        UIButton*ボタン=[UIButtonbuttonWithType:UIButtonTypeRoundedRect]; //作成ボタン       
        [button setTitle:@ "test1" forState:UIControlStateNormal];                        
        button.frame = CGRectMake(100、100、100、100);
        [button addTarget:self//タップされたボタンのインジケーターを更新するセレクターを追加します。タップボタンなしでスワイプする方法はありません。
                   アクション:@selector(updateButtonNumber :)
         forControlEvents:UIControlEventTouchDown];
        [ボタンsetTag:1];
        [self.view addSubview:button]; //表示するボタンを追加
        [自己beginListenToSwipes:button]; //4方向のUISwipeGestureRecognizerを追加するメソッドにボタンを送信します

        /*2番目のボタンと同じタスク*/
        UIButton * button1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];            
        [button1 setTitle:@ "test2" forState:UIControlStateNormal];                        
        button1.frame = CGRectMake(200、200、100、100);
        [button1 addTarget:self                         
                   アクション:@selector(updateButtonNumber :)
         forControlEvents:UIControlEventTouchDown];
        [button1 setTag:2];
        [self.view addSubview:button1];
        [自己beginListenToSwipes:button1];

    }

    / *ボタンをタップするたびに(スワイプを開始すると、このメソッドが呼び出され、buttonNumberは常に現在のボタンを指します* /
    -(void)updateButtonNumber:(UIButton *)sender
    {{
        self.buttonNumber.text = [NSString stringWithFormat:@ "%d"、sender.tag];
    }

    / *メソッドはUIButtonを受け取り、それにレコグナイザーを追加します* /
    -(void)beginListenToSwipes:(UIButton *)sender
    {{
        UISwipeGestureRecognizer * recognizer;
        認識=[[UISwipeGestureRecognizeralloc] initWithTarget:self action:@selector(handleSwipe :)];
        [認識機能setDirection:(UISwipeGestureRecognizerDirectionRight)];
        [送信者addGestureRecognizer:recognizer];

        認識=[[UISwipeGestureRecognizeralloc] initWithTarget:self action:@selector(handleSwipe :)];
        [認識機能setDirection:(UISwipeGestureRecognizerDirectionLeft)];
        [送信者addGestureRecognizer:recognizer];

        認識=[[UISwipeGestureRecognizeralloc] initWithTarget:self action:@selector(handleSwipe :)];
        [認識機能setDirection:(UISwipeGestureRecognizerDirectionUp)];
        [送信者addGestureRecognizer:recognizer];

        認識=[[UISwipeGestureRecognizeralloc] initWithTarget:self action:@selector(handleSwipe :)];
        [認識機能setDirection:(UISwipeGestureRecognizerDirectionDown)];
        [送信者addGestureRecognizer:recognizer];
    }

    / *スワイプが実行されたときに呼び出され、実行された方向を示すメソッド* /
    -(void)handleSwipe:(UISwipeGestureRecognizer *)recognizer
    {{
        int i = Recognitionr.direction;
        self.swipeDirection.text = [NSString stringWithFormat:@ "%d"、i];
    }

4

2 に答える 2

1

私の考えは、

  1. touchUpoutsideUIButtonのイベントに登録します。
  2. ボタンから指を離すと、ボタンが発射されます。
  3. touchesEndedメソッドからタッチポイントを見つけて、クラスレベルの変数に保存します。
  4. メソッド内のボタンフレームとタッチポイントを比較して、touchupoutside移動方向を見つけます。
于 2012-05-03T13:19:12.430 に答える
0

ジェスチャレコグナイザーをself.viewに配置して、ジェスチャが問題のコントロールに対して行われたかどうかを確認することもできると思います(もちろん、ボタンをivarにするか、ビューコントローラーのプロパティを作成して、追跡できるようにします。これはどれですか)、例えば

CGPoint point = [sender locationInView:self.view];
if (CGRectContainsPoint(button1.frame, point))
    // do whatever you want

このロジックをUIGestureRecognizerStateBeganまたはUIGestureRecognizerStateEnded、あるいはその両方で実行するかどうかは、あなた次第です。

アップデート:

ちなみに、何かを動かしている方向を検出している場合は、単一のジェスチャレコグナイザーで4つの方向すべてを処理するUIPanGestureRecognizerの使用を検討することもできます(継続的であるため、ユーザーにリアルタイムのフィードバックを提供できます移動をアニメーション化するUI)。

于 2012-05-03T13:07:32.177 に答える