2013-06-27 19 views
10

Vorrei rilevare la posizione di tocco (iniziale) nel mio UIScrollView quando l'utente inizia a trascinare. Ho cercato su Google questo problema e molti sembrano lottare con questo stesso problema. Ora, anche se non riesco ancora a spiegarmi perché Apple non consentirebbe agli utenti di accedere alle informazioni sul touch in una vista a scorrimento, non posso fare a meno di trovare una soluzione da solo. Tuttavia tutte le mie prove sono fallite, quindi vorrei chiederti.Rileva posizione touch su UIScrollView?

Ecco quello che pensavo sarebbe lavorare:

ho creato un UIPanGestureRecognizer come questo nel mio UIScrollView sottoclasse e aggiungerlo ai propri sistemi di riconoscimento gesto:

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

E il metodo corrispondente:

-(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; 
    /**** 
    ????? 
    *****/ 

} 

Come indicato dai commenti, vorrei disabilitare il gesto pan dopo aver ottenuto il punto e quindi disabilitare il riconoscimento (mentre STILL trascinando!) e "passa" i tocchi alla mia vista di scorrimento, in modo che l'utente possa scorrere normalmente. È del tutto fattibile? C'è qualche altra soluzione ad esso?

risposta

31

Bene UIScrollView ha già un gesto pan integrato che è possibile sfruttare. L'utilizzo sarebbe semplice come impostare la classe come delegato della vista di scorrimento (per utilizzare scrollViewWillBeginDragging) e utilizzando l'ubicazione di UIPanGestureRecognizer -locationInView: per determinare la posizione del tocco.

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

è possibile rilevare se questo scroll è in qualche posizione xx quindi scrollView scrolling o touch non verrà attivato? diciamo che ho due viste, una mappa e un pannello sotto la mappa in una vista di scorrimento, non voglio che la vista di scorrimento per licenziare il suo delegato quando tocchi mappa e mappa dovrebbe ottenere il suo tocco –

0

Perché non si prende la posizione di partenza in -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event che sarà più conveniente ed efficiente.

+3

Sono pienamente consapevole delle funzioni di tocco e infatti, ho provato a implementarle, ma non vengono chiamate affatto. –

+0

Non con interazione utente abilitata. Comunque disabilitarlo e lo farà. Ma allora non sarai in grado di interagire con nessuno dei suoi childobjects ... – Philip

Problemi correlati