2012-03-29 20 views
8

Quando seleziono una riga in un UITableView, chiamo scrollRectToVisible:animated sul GCRect del frame della riga, e subito dopo faccio altre animazioni. Il mio problema è che non so quando l'animazione da scrollRectToVisible:animated è completa.In una UITableView, come faccio a sapere quando scrollRectToVisible è completo per una riga?

Il mio codice:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView cellForRwoAtIndexPath:indexPath]; 

    [self.tableView scrollRectToVisible:cell.frame animated:YES]; 

    //more animations here, which I'd like to start only after the previous line is finished! 
} 
+0

+1 Buona domanda, ma temo che la risposta sia: non si sa quando 'scrollRectToVisible: animated:' termina. – Sam

+0

La risposta alla seguente domanda potrebbe essere d'aiuto anche qui: http://stackoverflow.com/questions/7198633/how-can-i-tell-when-a-uitableview-animation-has-finished – fishinear

risposta

3

Il protocollo UITableViewDelegate conforme alle UIScrollViewDelegate. È possibile impostare BOOL parametro quando si scorre manualmente e poi controllare in scrollViewDidScroll:

BOOL manualScroll; 
... 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView cellForRwoAtIndexPath:indexPath]; 

    manualScroll = YES; 
    [self.tableView scrollRectToVisible:cell.frame animated:YES]; 
} 
... 
- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    if (manualScroll) 
    { 
     manualScroll = NO; 
     //Do your staff 
    } 

} 

Non dimenticare di impostare UITableViewDelegate.

+0

Questo è piuttosto hacky, ma sembra che funzionerebbe, e il meglio che puoi fare dato il quadro. Grazie per la risposta! –

+0

c'è la proprietà 'dragging' su UIScrollView che esegue il tracciamento manuale dello scroll per te –

15

mi sono imbattuto in questo metodo UIScrollViewDelegate:

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView 
{ 
    // Do your stuff. 
} 

chiamato solo per pergamene animati. Non chiamato per scrolls basati su touch. Sembra funzionare bene.

+0

Proprio quello che stavo cercando, grazie !! –

5

Un modo più semplice è quello di incapsulare il codice lo scorrimento in un UIView animateWith [...] blocco, in questo modo:

[UIView animateWithDuration:0.3f animations:^{ 
    [self.tableView scrollRectToVisible:cell.frame animated:NO]; 
} completion:^(BOOL finished) { 
    // Some completion code 
}]; 

Nota che animava == NO nel scrollRectToVisible: animato: metodo.

+0

Questo dovrebbe essere il custode –

Problemi correlati