2011-12-04 11 views
6

Estoy tratando de realizar un seguimiento de dónde está un dedo en un UIScrollView. He subclasificado UIScrollView (ver a continuación) pero desafortunadamente el reconocedor de gestos que estoy agregando está anulando el estándar.Agregar funcionalidad al reconocedor de reconocimiento de movimiento estándar en UIScrollView

Como resultado obtengo NSLog(@"Pan") para trabajar, pero desafortunadamente la vista ya no se desplaza.

¿Cómo puedo obtener ambos reconocedores de gestos para trabajar al mismo tiempo?

Gracias.

- (void)viewDidLoad:(BOOL)animated 
{ 
    [super viewDidLoad:animated]; 

    UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)]; 
    [scrollView addGestureRecognizer:panRecognizer]; 
} 


- (void)pan:(id)sender { 
    NSLog(@"Pan"); 
} 
+2

No dice lo que espera que suceda cuando ambas cosas suceden al mismo tiempo. ¿Espera que se desplace * y * actualice su reconocedor de panorama? Si es así, ¿por qué no simplemente escuchar los métodos de delegación de vista de desplazamiento que se llaman cuando se desplaza la vista? –

+0

Me gustaría que la vista se desplace y grabe todos los puntos tocados (que sé que puedo recuperar a través del método 'locationInView:'). El delegado de la vista de desplazamiento suena interesante. Nunca he oído hablar de eso. Soy bastante nuevo en la programación de iOS. ¿Cómo funcionaría? Gracias. –

+0

He encontrado [esta referencia en los delegados de la vista de desplazamiento] (http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIScrollViewDelegate_Protocol/Reference/UIScrollViewDelegate.html#//apple_ref/occ/intf/ UIScrollViewDelegate) pero no entiendo cómo recuperar las coordenadas del toque. –

Respuesta

4

EDITAR: este método funciona! Solo necesita establecer canCancelContentTouches tan pronto como sea posible (lo hago en viewDidLoad).

RESPUESTA ORIGINAL: He intentado un nuevo enfoque, pero desafortunadamente no funciona del todo.

En lugar de agregar un reconocedor de gestos, estoy subclasificando el UIScrollView y escribiendo mis propios métodos touchesBegan, touchesMoved, etc.

De esta manera sé donde el usuario está tocando pero desafortunadamente el PanGestureRecognizer está provocando touchesCancelled cada vez que se inicia para desplazarse incluso después de ajustar el canCancelContentTouches a NO.

¿Alguien sabe por qué? También encontré this.

14

Si no desea anular el estándar, solo tiene que permitir que ambos sean reconocidos simultáneamente.

- (void)viewDidLoad:(BOOL)animated 
{ 
    [super viewDidLoad:animated]; 

    UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)]; 
    panRecognizer.delegate = self; 
    [scrollView addGestureRecognizer:panRecognizer]; 
} 

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
{ 
    return TRUE; 
} 


- (void)pan:(id)sender { 
    NSLog(@"Pan"); 
} 
+0

esto funciona perfectamente! –

Cuestiones relacionadas