2013-05-29 2 views
-1

J'ai trouvé un poste ici brièvement décrit comment savoir si un UIScrollView a terminé le défilement How to know exactly when a UIScrollView's scrolling has stopped?. Il utilise la fonction scrollViewDidEndDragging et comme spécifié dans la documentation de UIScrollView et le post mentionné ci-dessus, le paramètre declive willDecelerate: (BOOL) indique quand le défilement s'est arrêté. Cependant, il me semble ne peux toujours pas obtenir cet extrait de code pour:IOS Questions Telling Lorsque Scroll View a fini

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate 
{ 
    NSLog(@"%d", decelerate); 

    if (!decelerate) 
    { 
     isScrolling = NO; 
    } 

    isScrolling = YES; 
} 

Je confirme que la fonction est en cours d'exécution avec le NSLog mais même après que je laisse aller et le défilement est terminé décélérer est toujours égale à 1 . Pourquoi est-ce?

Répondre

1

-scrollViewDidEndDragging:willDecelerate: est appelé une fois que vous arrêtez de glisser, mais ce n'est pas nécessairement lorsque la vue cesse de défiler. Si vous voulez savoir quand la vue cesse de bouger, utilisez -scrollViewDidEndDecelerating: ou -scrollViewDidEndScrollingAnimation:.

Si vous voulez seulement savoir si la vue de défilement défile actuellement, il peut être préférable de demander à la vue de défilement lui-même plutôt que d'essayer de garder une trace quand il commence et quand il arrête. Si la vue déroulante défile, c'est soit parce que l'utilisateur est en train de faire glisser, soit parce que la vue déroulante décélère après un glissement. Vous pouvez facilement ajouter une méthode (dans une catégorie) à UIScrollView qui vérifie ces deux conditions:

@interface UIScrollView (Scrolling) 
- (BOOL)scrolling; 
@end 

@implementation UIScrollView (Scrolling) 
- (BOOL)scrolling 
{ 
    return (self.dragging || self.decelerating); 
} 
@end 
+0

Impressionnant est-il possible de dire quand le défilement commence donc je peux mettre isScrolling YES? Est-ce géré avec la méthode scrollViewDidScroll? @Caleb – ScottOBot

+0

Lorsqu'il existe une méthode '... didEnd ...', il existe généralement aussi une méthode '... willBegin ...'. Jetez un oeil sur les documents pour 'UIScrollViewDelegate'. – Caleb

+0

Merci l'homme que j'ai fini par utiliser - (void) scrollViewWillBeginDragging: (UIScrollView *) scrollView. – ScottOBot