2016-05-17 6 views
1

enter image description hereTap-Geste subview Berührung erkennen

i Schublade erschaffe

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; 

und wenn die Taste tippen i gerade eingestellt Rahmen von _menuView.view wie eine Schublade verhalten

, was ich will, ist Berührung zu erkennen außerhalb der Schublade, aber ich kann es nicht tun

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 
if (touch.view == self.menuView.view) { 
    NSLog(@"Touch Drawer"); 
} else { 
    NSLog(@"Touch Outside"); 
} 

return YES; 
} 

aber es zeigt immer Touch-Outside“

i bin etwas fehlt, aber nicht wissen, was Dank im Voraus

auch mit 2 Geste versuchen, aber nicht arbeiten, weil eine Geste in self.view so, wenn Ich tippe in der Schublade Methode Anruf 2 mal.

für, dass ich versuchte, eine Geste zu deaktivieren, noch ruft zweimal

- (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; 
} 

Antwort

0

Ich habe dieses Problem lösen mit dem Hinzufügen von zwei Geste

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

gemäß @Eugene Zaychenko Antwort- aber es gibt immer noch ein Problem, weil Delegate Methode zwei Mal anrufen

auch kann ich nicht [self.touchOutSideDrawer setEnabled:NO]; wenn Touch in Schublade angezapft, weil nach tha t wird es aus der Ansicht entfernen und nie wieder ausgeführt, wenn [self.touchOutSideDrawer setEnabled:YES];

aber interessanteste daran ist,

_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 Methode nur einmal aufrufen, damit ich meine gesamten Code dort verschoben und arbeitet

- (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

Die UITapGestureRecognizer kann nicht die Berührung außerhalb der Ansicht erkennen, die es gehört.

Sie müssen einen weiteren UITapGestureRecognizer erstellen und sie zu self.menuView.view hinzufügen.

Sie können auch zwei @property für Ihre Geste Erkenner machen und sie innerhalb Methode überprüfen:

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

Ich versuchte, dass nicht funktioniert, weil ich Geste in self.view so hinzugefügt habe, wenn ich auf Schublade Geste Delegat Methode Feuer 2 Mal tippen –

+0

versuchen, die Methode der Delegierten zu implementieren: - (BOOL) GestenRecognizer: (UIGestureRecognizer *) GestenRecognizer sollteRecognizeSimultanelyWithGestureRecognizer: (UIGestureRecognizer *) otherGestureRecognizer und einfach NO zurückgeben; –

+0

auch versuchen, das Verfahren zu implementieren: - (BOOL) gestureRecognizerShouldBegin: (UIGestureRecognizer *) GestureRecognizer –