2016-05-17 1 views
1

enter image description hereタップジェスチャーサブビューtouchが

を検出私は引き出し

self.isShowMenuVC = NO; 
_menuView = [MenuViewController viewController]; 
[self.menuView setDelegate:self]; 
[self addChildViewController:self.menuView]; 
[self.menuView.view setFrame:CGRectMake(-kMenuTableWidth, 0, kMenuTableWidth, self.view.frame.size.height)]; 
[self.view addSubview:self.menuView.view]; 
[self.menuView didMoveToParentViewController:self]; 

UITapGestureRecognizer *outsideTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(outsideTapped:)]; 
[self.view addGestureRecognizer:outsideTap]; 
outsideTap.delegate = self; 

とするとき、私はちょうど私が欲しいものを引き出し

のように動作する_menuView.viewの枠を設定し、ボタンのタップがタッチを検出することであるを作成しています引き出しの外にあるが、私はそれをすることができない。

それは私が何かをしないのですが、事前

で感謝をするとき、また、2ジェスチャーをしようとしたがそうself.viewに1つのジェスチャーので、動作していないのか分からない

「外タッチを示して常にあります私は引き出し方法の呼び出しを2回タップします。そのため

私はまだUITapGestureRecognizerは、それが属するビューの外側のタッチを検出することはできません

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 

if (gestureRecognizer == self.touchInDrawer) { 
    NSLog(@"Touch in drawer"); 
    [self.touchOutSideDrawer setEnabled:NO]; 
} else { 
    NSLog(@"Outside"); 
    [self hideMenuView]; 
} 
return YES; 
} 

答えて

0

2回呼び出すデリゲートメソッドなのでまだ問題はあります

でも私はできません[self.touchOutSideDrawer setEnabled:NO];タップしたままタッチすると、それはビューから削除し、[self.touchOutSideDrawer setEnabled:YES];

が、最も興味深いものが

_touchInDrawer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(outsideTapped:)]; 
[self.menuView.view addGestureRecognizer:self.touchInDrawer]; 
self.touchInDrawer.delegate = self; 

_touchOutSideDrawer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(outsideTapped:)]; 
[self.view addGestureRecognizer:self.touchOutSideDrawer]; 
self.touchOutSideDrawer.delegate = self; 

は一度だけ呼び出す方法をoutsideTappedので、私はそこに私のすべてのコードをシフトされ、

を働いている場合は、再度実行することはありませんtは
- (void) outsideTapped:(UITapGestureRecognizer *)gestureRecognizer { 

if (gestureRecognizer == self.touchOutSideDrawer) { 
    // [self.view removeGestureRecognizer:self.touchOutSideDrawer]; 
    [self hideMenuView]; 
    NSLog(@"Outside"); 

} else { 
    NSLog(@"Touch in drawer"); 

    // [self.touchOutSideDrawer setEnabled:NO]; 

} 

} 
1

2回呼び出し、1つのジェスチャーを無効にしてみました。

別のUITapGestureRecognizerを作成し、self.menuView.viewに追加する必要があります。

また、あなたはあなたのジェスチャー認識装置のための2つの@propertyを作成し、メソッド内でそれらを確認することができます。私は@Eugene Zaychenkoの回答につきように2つのジェスチャー

@property (strong,nonatomic)  UITapGestureRecognizer   *touchInDrawer; 
@property (strong,nonatomic)  UITapGestureRecognizer   *touchOutSideDrawer; 

を追加することでこの問題を解決する必要があり

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 
if (gestureRecognizer == self.firstGesture) { 
    NSLog(@"Touch in first gesture"); 
} else { 
    NSLog(@"Touch in another gesture"); 
} 
+0

私はself.viewにジェスチャーを追加しているので、私はそれを試しました。私は引き出しジェスチャーデリゲートメソッドを2回タップします。 –

+0

デリゲートのメソッドを実装しようとしてください: - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGetureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer とNOを返します。 ** –

+0

また、メソッドを実装しよう –