iphone - framework - Problema de gestos: UISwipeGestureRecognizer+UISlider
uikit ios (2)
La forma más sencilla de manejar esto es probablemente evitar que el reconocedor de gestos vea los toques en su control deslizante. Puede hacerlo estableciéndose como delegado y luego implementando
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if ([touch.view isKindOfClass:[UISlider class]]) {
// prevent recognizing touches on the slider
return NO;
}
return YES;
}
Si esto no funciona, es posible que el control deslizante tenga subvistas que reciban el toque, por lo que podría subir por la cadena de superview
, probando cada vista en el camino.
Tengo un problema relacionado con el gesto. Implementé UISwipeGestureRecognizer para obtener eventos de izquierda y derecha y eso está funcionando bien. Sin embargo, el problema al que me enfrento es que los UISlider que tengo en la misma vista no están jugando bien. El movimiento deslizante de los deslizadores se está confundiendo con un deslizamiento hacia la izquierda / derecha.
¿Alguien experimentó este problema antes, tiene alguna idea de cómo corregirlo?
Muchas gracias.
Aquí está el código contenido dentro del controlador de vista:
- (void)viewDidLoad {
[super viewDidLoad];
//Setup handling of LEFT and RIGHT swipes
UISwipeGestureRecognizer *recognizer;
recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)];
[recognizer setDirection:(UISwipeGestureRecognizerDirectionRight)];
[[self view] addGestureRecognizer:recognizer];
[recognizer release];
recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)];
[recognizer setDirection:(UISwipeGestureRecognizerDirectionLeft)];
[[self view] addGestureRecognizer:recognizer];
[recognizer release];
}
-(void)handleSwipeFrom:(UISwipeGestureRecognizer *)recognizer {
if (recognizer.direction == UISwipeGestureRecognizerDirectionRight) {
NSLog(@"Swipe Right");
//Do stuff
}
if (recognizer.direction == UISwipeGestureRecognizerDirectionLeft) {
NSLog(@"Swipe Left");
//Do stuff
}
}
Terminé haciendo que esto funcionara justo antes de que Lily respondiera arriba. Aquí está el código que usé, pero el de Lily se ve más limpio (no hayas probado el de Lily):
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
BOOL AllowSwipes = YES;
CGPoint point1 = [touch locationInView:_sliderLeft];
CGPoint point2 = [touch locationInView:_sliderRight];
//Left slider test
if ([_sliderLeft hitTest:point1 withEvent:nil] != nil) {
AllowSwipes = NO;
NSLog(@"On Left Slider");
}
//Right slider test
if ([_sliderRight hitTest:point2 withEvent:nil] != nil) {
AllowSwipes = NO;
NSLog(@"On Right Slider");
}
}
return AllowSwipes;
}