/ / gesto limitante a la vista [duplicado] - ios, uigesturerecognizer

gesto limitante en la vista [duplicado] - ios, uigesturerecognizer

Así es como agrego gesto a la vista

- (void)_addPanGestureToView:(UIView *)view {
UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(_handlePan:)];
panGesture.delegate = self;
panGesture.maximumNumberOfTouches = 1;
panGesture.minimumNumberOfTouches = 1;
[view addGestureRecognizer:panGesture];
}

Todo funciona a la perfección, pero el gesto está en la vista general, ¿cómo podría hacer algo como responder solo con la mitad de la vista?

Respuestas

7 para la respuesta № 1

¿Por qué no solo usar CGRectContainsPoint() y verifique si la ubicación de toques dentro de su vista está dentro del área que desea que sea. Si no es "t", ignórelo:

- (void)panGestureDetected:(UIPanGestureRecognizer *)sender
{
CGPoint location = [sender locationInView:sender.view];
CGRect someRect = ...

if (CGRectContainsPoint(someRect, location)) {
// point is in specified area
}
}

3 para la respuesta № 2

La solución más fácil sería agregar una vista transparente en el área donde desea que funcione su reconocedor de gestos, y agregar el gesto a esa vista (y esa vista como una subvista, por supuesto). Algo así como:

- (void)_addPanGestureToView:(UIView *)view {
UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(_handlePan:)];
panGesture.delegate = self;
panGesture.maximumNumberOfTouches = 1;
panGesture.minimumNumberOfTouches = 1;

UIView *viewForGesture = [[UIView alloc] initWithFrame:CGRectMake(....)]; //your frame
[viewForGesture addGestureRecognizer:panGesture];
[view addSubview:viewForGesture];
}