ios uiscrollview touch uigesturerecognizer uiresponder

ios - Detecta la ubicación táctil en UIScrollView?



touch uigesturerecognizer (2)

Me gustaría detectar la posición táctil (inicial) en mi UIScrollView cuando el usuario comienza a arrastrar. He buscado este tema en Google y muchos parecen tener problemas con este tema. Ahora, aunque todavía no puedo entender por qué Apple no permite que los usuarios accedan a la información táctil en una vista de desplazamiento, no puedo evitar encontrar una solución por mi cuenta. Sin embargo, todos mis intentos fallaron, así que me gustaría preguntarle.

Esto es lo que pensé que funcionaría:

Configuré un UIPanGestureRecognizer como este en mi subclase UIScrollView y lo agregué a sus reconocedores de gestos:

UIPanGestureRecognizer *tapDrag = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(touchedAndDragged:)]; tapDrag.cancelsTouchesInView = NO; tapDrag.delegate = self; [self addGestureRecognizer:tapDrag];

Y el método correspondiente:

-(void)touchedAndDragged:(UIPanGestureRecognizer*)t{ CGPoint loc = [t locationInView:self]; //do something with location (that is exactly what I need) //... //Now DISABLE and forward touches to scroll view, so that it scrolls normally t.enabled = NO; /**** ????? *****/ }

Como lo indican los comentarios, me gustaría deshabilitar el gesto de panorámica después de tener el punto y luego desactivar el reconocedor (¡mientras sigo arrastrando!) Y "pasar" los toques a mi vista de desplazamiento, para que el usuario pueda desplazarse normalmente. ¿Es eso factible en absoluto? ¿Hay alguna otra solución para esto?


¿Por qué no agarras la ubicación de inicio en -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event que será más conveniente y eficiente.


Bueno, UIScrollView ya tiene un gesto incorporado en el pan que puede aprovechar. El uso sería tan simple como configurar tu clase como delegado de la vista de desplazamiento (para utilizar scrollViewWillBeginDragging) y usar UIPanGestureRecognizer -locationInView: para determinar la ubicación táctil.

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { CGPoint location = [scrollView.panGestureRecognizer locationInView:scrollView]; NSLog(@"%@",NSStringFromCGPoint(location)); }