6

画面上のどこでも、2 本指のスワイプをリッスンするジェスチャ認識エンジンを作成できるようにしたいと考えています。

現在、もちろん、スクロールするサブビューに UITableView がありますが、ビューに設定した UIGestureRecognizer を取得していないようです。2本の指を使うと、スクロールするだけです...

ビュー全体、おそらくスーパービューを2本の指のタッチでリッスンし、それを認識すると、テーブルビューをスクロールする代わりに、私がやりたいことをする方法はありますか?

編集:私のコードはここにありますが、これは非常に一般的な質問であると思われます。ビュー全体で UIGestureRecognizers を使用できるようにしたいだけです。

navBarTitle.title = @"Crunch";

//opening the menuView from launch

//setup the customtable view as a subview in menuView
SDMenuViewController *mvc = [[[SDMenuViewController alloc] initWithNibName:@"SDNestedTableView" bundle:nil] autorelease];
[self addChildViewController:mvc];
[mvc didMoveToParentViewController:self];
[menuView addSubview:mvc.view];

[mvc.view setFrame:CGRectMake(mvc.view.frame.origin.x, mvc.view.frame.origin.y, mvc.view.frame.size.width, mvc.view.frame.size.height + 44)]; //add navBarHeight, for some strage reason

//add swipe down gesture on for the menu

UISwipeGestureRecognizer *swipeClose =[[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(closeMenu)] autorelease];
 swipeClose.numberOfTouchesRequired = 2;
 swipeClose.direction = UISwipeGestureRecognizerDirectionUp;

 UISwipeGestureRecognizer *swipeOpen = [[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(openMenu)] autorelease];
 swipeOpen.numberOfTouchesRequired = 2;
 swipeOpen.direction = UISwipeGestureRecognizerDirectionDown;

for (UIGestureRecognizer* rec in menuView.gestureRecognizers) {
    [rec requireGestureRecognizerToFail:swipeClose];
    [rec requireGestureRecognizerToFail:swipeOpen];
}

for (UIGestureRecognizer* rec in mvc.view.gestureRecognizers) {
    [rec requireGestureRecognizerToFail:swipeClose];
    [rec requireGestureRecognizerToFail:swipeOpen];
}

[mvc.view addGestureRecognizer:swipeClose];
[mvc.view addGestureRecognizer:swipeOpen];

[self.view addGestureRecognizer:swipeClose];
[self.view addGestureRecognizer:swipeOpen];
4

5 に答える 5

4

多分私は私の質問を明確に説明しませんでした。しかし、私がやっていたことのためにこれはうまくいくことになりました、そして多分それは将来他の人々を助けるでしょう:

UIScrollviewforiPadアプリケーションで2本の指でスワイプ

于 2012-10-17T00:20:17.183 に答える
2
//In view did load        
    [self.view setMultipleTouchEnabled:YES];

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{

    if ([[event touchesForView:self.view] count] > 1) {
        NSLog(@"%d active touches",[[event touchesForView:self.view] count]) ;
 UISwipeGestureRecognizer *swipeGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeGesture:)];
            swipeGesture.direction = UISwipeGestureRecognizerDirectionUp;
            [self.view addGestureRecognizer:swipeGesture];
  }

}

    -(void)handleSwipeGesture:(UISwipeGestureRecognizer *) sender 
    {
        //Gesture detect - swipe up/down , can be recognized direction
        if(sender.direction == UISwipeGestureRecognizerDirectionUp)
        {
            // do some thing...
        }
    }

これで問題が解決することを願っています。タッチが有効になっている場合は、カウントを 2 または任意の数のタッチに等しくします.. :) 疑問がある場合はお気軽にお問い合わせください

于 2012-10-17T13:31:08.880 に答える
2

次のようなことを試すことができます。

UISwipeGestureRecognizer* p = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(actionPan:)];
p.numberOfTouchesRequired = 2;

for (UIGestureRecognizer* rec in tableView.gestureRecognizers) {
    [rec requireGestureRecognizerToFail:p];
}

[self.view addGestureRecognizer:p];

それが役立つことを願っています

于 2012-10-12T20:56:26.817 に答える
1

  「viewForGesture」のようにself.viewの上にself.viewのフレームを持つ別のビューを追加し、そのビューにジェスチャ認識機能を追加します

       UIView *viewForGesture = [[ [UIView alloc]initWithFrame:self.view.frame] autorelease];
       [viewForGesture setBackgroundColor:[UIColor clearColor]];
       [self.view addSubview:viewForGesture];
        .
        .
        .
       [viewForGesture addGestureRecognizer:swipeOpen];
       [viewForGesture addGestureRecognizer:swipeClose];
于 2012-10-15T13:54:38.073 に答える
0

UIView検出を行うには2つの方法がありtouchます。あなたが定義し、それを望んでいるアプローチは、すでにエゼキUIGestureRecognizerによって与えられた答えです。検出に使用できるもう1つのアプローチは、デリゲートをオーバーライドすることです。touchUITouch

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
    UITouch *touch = [touches anyObject];

    if(touch.tapCount==2)
    {
        //Do something ... (Here, you can also check for the object which touched.)
    }
}
于 2012-10-15T13:17:55.223 に答える