2011-12-04 5 views
6

Sto tentando di tenere traccia di dove si trova un dito in un UIScrollView. Ho sottoclassificato UIScrollView (vedi sotto), ma sfortunatamente il riconoscimento di gesti che sto aggiungendo sta sovrascrivendo quello standard.Aggiunta di funzionalità a Pan Gesture Recognizer standard in un UIScrollView

Come risultato ottengo NSLog(@"Pan") per funzionare ma sfortunatamente la vista non scorre più.

Come posso ottenere entrambi i rilevatori di gesti allo stesso tempo?

Grazie.

- (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

Non si dice cosa ci si aspetta che accada quando entrambe le cose si verificano nello stesso momento. Ti aspetti che scorra * e * aggiorni il tuo pan-riconoscitore? In tal caso, perché non ascoltare semplicemente i metodi di delega della vista di scorrimento che vengono richiamati quando si scorre la vista? –

+0

Mi piacerebbe che la vista scorra e registri tutti i punti toccati (che so di poter recuperare tramite il metodo locationInView:). La visualizzazione a scorrimento delega sembra interessante - Non ho mai sentito parlare di questo ... Sono abbastanza nuovo per la programmazione iOS - come funzionerebbe? Grazie. –

+0

Ho trovato [questo riferimento sui delegati della vista di scorrimento] (http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIScrollViewDelegate_Protocol/Reference/UIScrollViewDelegate.html#//apple_ref/occ/intf/ UIScrollViewDelegate) ma non capisco come recuperare le coordinate del tocco. –

risposta

4

EDIT: questo metodo funziona! Devi solo impostare canCancelContentTouches il prima possibile (lo faccio in viewDidLoad).

RISPOSTA ORIGINALE: Ho provato un nuovo approccio ma sfortunatamente non funziona completamente.

Invece di aggiungere un riconoscitore di gesti sto creando una sottoclasse di UIScrollView e scrivendo i miei metodi touchesBegan, touchesMoved, ecc.

In questo modo so dove l'utente sta toccando ma purtroppo il PanGestureRecognizer sta innescando touchesCancelled ogni volta che inizio a scorrere anche dopo aver impostato il canCancelContentTouches a NO.

Qualcuno sa perché? Ho anche trovato this.

14

Se si desidera che non sovrascriva quello standard, è sufficiente consentire a entrambi di essere riconosciuti contemporaneamente.

- (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

funziona perfettamente! –