1

ボタンにジェスチャ認識機能を追加して、ユーザーがボタン フレームをスワイプした場合にコードを実行できるようにしたいと考えています。また、スワイプがボタンの上、右、左、または下の場合に、このコードを異なるものにしたいと考えています。

-(void)viewDidLoad
{
    [super viewDidLoad];
    UIButton *button=[UIButton buttonWithType:UIButtonTypeRoundedRect];
    button.frame=CGRectMake(0, 0, 100, 100);
    [self.view addSubview:button];
    UIGestureRecognizer *swipe=[[UIGestureRecognizer alloc]initWithTarget:button action:@selector(detectSwipe)];
    [button addGestureRecognizer:swipe];
}

それで、私はinitWithTarget:action:正しいことをしましたか?これを行うと、メソッドをどのように実装しdetectSwipeますか?

ここに実装方法に関する私の考えがありますdetectSwipe

          -(IBAction)detectSwipe:(UIButton *)sender
        {
      /* I dont know how to put this in code but i would need something like, 
if (the swipe direction is forward and the swipe is > sender.frame ){ 
[self ForwardSwipeMethod];
    } else if //same thing for right
    else if //same thing for left
    else if //same thing for down

        }
4

4 に答える 4

5

いいえ、それは正しくありません。ジェスチャ認識エンジンのターゲットはボタンではなく、ジェスチャを検出するときにアクション メソッドを呼び出すオブジェクトです (そうでなければ、どのオブジェクトでそのメソッドを呼び出すかをどのように知るのでしょうか? OO では、メソッド呼び出し/メッセージ送信には明示的なメソッド名インスタンスまたはクラス)。

だからあなたはおそらく望むでしょう

recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(didSwipe:)];

また、UIGestureRecognizer のインスタンスを直接作成するのではなく、具体的なサブクラスの場合は 1 つ、この場合は UISwipeGestureRecognizer を作成します。

レコグナイザーを割り当て初期化した後、認識させたいビューにアタッチします。

[button addGestureRecognizer:recognizer];

次に、didSwipe: メソッドで、ジェスチャ認識エンジンのプロパティを使用して、スワイプのサイズ/距離/その他のプロパティを決定できます。

次回はいくつかのドキュメントを読んだ方がよいでしょう。

于 2012-08-12T20:50:03.777 に答える
2

ジェスチャ認識の対象以外は大丈夫です。ターゲットは、指定されたセレクター メッセージを受け取るオブジェクトであるため、ボタンのサブクラスにメソッドを実装していない限り、initWithTarget:呼び出しは引数として受け入れる必要があります。selfdetectSwipe

于 2012-08-12T20:44:36.380 に答える
2

おそらくUISwipeGestureRecognizerを使用したいと思うでしょう。UIGestureRecognizer は、サブクラス化しない限り、通常は使用しないでください。コードは次のようになります。

UISwipeGestureRecognizer *swipe=[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(detectSwipe)];
swipe.direction = UISwipeGestureRecognizerDirectionRight;
[button addGestureRecognizer:swipe];
于 2012-08-12T20:51:00.050 に答える
1

H2CO3 の回答が完了しました。セレクターの最後にコロン「:」がないことを忘れないでください。次のようになります。@selector(detectSwipe:)

コロン「:」は、メソッドに引数があるためです。(UIButton *)sender

于 2012-08-12T21:08:40.473 に答える