J'ai une sous-vision et un superview. Le SuperView a un uitapgesurerecognizer attaché à celui-ci.
UIView *superview = [[UIView alloc] initWithFrame:CGRectMake:(0, 0, 320, 480); UIView *subview = [[UIView alloc] initWithFrame:CGRectMake:(100, 100, 100, 100); UIPanGestureRecognizer *recognizer = [[UIPanGestureRecognizer alloc] initWithTarget: self action: @selector(handleTap); superview.userInteractionEnabled = YES; subview.userInteractionEnabled = NO; [superview addGestureRecognizer:recognizer]; [self addSubview:superview]; [superview addSubview:subview];
3 Réponses :
Vous pouvez utiliser le délégué de reconnaissance de geste pour limiter la zone où il peut reconnaître les touches similaires à cet exemple: Notez que vous devez conserver la référence à votre parent et à votre vision des enfants (faites-la faire une instance variables?) Pour pouvoir les utiliser dans la méthode des délégués P> p>
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { if(touch.view == yourSubview) { return NO; } else { return YES; } } Thanks : https://stackoverflow.com/a/19603248/552488
Pour SWIFT 3, vous pouvez utiliser View.Contains (point) code> au lieu de
CGrectContainspoint code>.
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
if yourSubview.frame.contains(touch.location(in: view)) {
return false
}
return true
}