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
}