8

2つの異なるUIViewで作業したいUIGestureRecognizerがあり、どちらもUiViewControllerの同じビュー階層にあります。UIGestureRecognizerのアクションはそれぞれでほぼ同じなので、同じ関数を呼び出して(明らかにそうなります)、実行時にどのUIViewを処理しているかを通知します。しかし、どのように?UIGestureRecognizerがオブジェクト情報を持っていることがわかりません。ドキュメントの行が欠落していますか、それとも、gestureRecognizerは、それが呼び出されているオブジェクトにアタッチされているかどうかを認識していませんか?言語の要点はそれが知っているということのようです。

あるいは、クラスの意図を誤解している可能性があります。

UITapGestureRecognizer *dblTap = 
[[UITapGestureRecognizer alloc] initWithTarget: self 
                                        action: @selector(handleDblTap:)];   
[viewA addGestureRecognizer: dblTap]; 
[viewB addGestureRecognizer: dblTap];

そして、次のことができると期待しています。

-(void)handleDblTap: (UIGestureRecognizer *)gestureRecognizer
{
     if (viewA)...

実際、UIGestureRecognizerが複数のオブジェクトへの同時アタッチをサポートしていない場合、なぜこれをサポートしていないのかを知っているなら、私に教えてもらえますか?助けてくれてありがとう。

4

3 に答える 3

22

標準は、レコグナイザーごとに1つのビューです。ただし、1つのハンドラーメソッドを効率的に使用できます。

次のようにレコグナイザーをインスタンス化します。

UITapGestureRecognizer *dblTapViewA = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDblTap:)];   
[viewA addGestureRecognizer: dblTapViewA]; 

UITapGestureRecognizer *dblTapViewB = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDblTap:)];
[viewB addGestureRecognizer: dblTapViewB];

その場合、ハンドラーメソッドは次のようになります。

-(void)handleDblTap:(UITapGestureRecognizer *)tapRec{
    if (tapRec.view == viewA){
        // double tap view a
    } else if (tapRec.view == viewB) {
        // double tap view b
    }
}
于 2012-04-24T06:08:22.450 に答える
0

表示するタグを割り当ててから、そのタグを比較してアクションを実行できます。

UITapGestureRecognizer *dblTap = 
[[UITapGestureRecognizer alloc] initWithTarget: self 
                                    action: @selector(handleDblTap:)];   
[view addGestureRecognizer: dblTap];
view.tag = 2000; // set any integer 

そして電話しながら

-(void)handleDblTap:(UITapGestureRecognizer *)tapRec{
    if (tapRec.view.tag == 2000){
      // double tap view with tag
    } 
}
于 2017-01-30T11:45:55.267 に答える
-1
UITapGestureRecognizer *dblTapA = 
[[UITapGestureRecognizer alloc] initWithTarget: self 
                                    action: @selector(handleDblTap:)];   
[viewA addGestureRecognizer: dblTapA]; 

UITapGestureRecognizer *dblTapB = 
[[UITapGestureRecognizer alloc] initWithTarget: self 
                                    action: @selector(handleDblTap:)];   
[viewA addGestureRecognizer: dblTapB]; 
于 2012-04-24T06:21:30.400 に答える