Existe-t-il un moyen de vérifier si ma tableview vient juste de terminer le défilement? table.isDragging
et table.isDecelerating
sont les deux seules méthodes que je puisse trouver. Je ne sais pas comment je peux anticiper ou recevoir une notification lorsque la vue de la table a fini de défiler.
Puis-je en quelque sorte utiliser des minuteries pour vérifier chaque seconde si la tableView défile ou non?
Vous implémenteriez la méthode de protocole UIScrollViewDelegate
comme suit:
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
if (!decelerate) {
[self scrollingFinish];
}
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
[self scrollingFinish];
}
- (void)scrollingFinish {
//enter code here
}
Version rapide
public func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
if decelerate {
scrollingFinished()
}
}
public func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
scrollingFinished()
}
func scrollingFinished() {
print("scrolling finished...")
}
Pour la méthode déléguée ci-dessus The scroll view sends this message when the user’s finger touches up after dragging content. The decelerating property of UIScrollView controls deceleration.
Lorsque la vue est décélérée pour s'arrêter, le paramètre decelerate
sera NO
.
Le second utilisé pour le défilement lent, même le défilement s’arrête lorsque vous touchez votre doigt, comme le dit Apple Documents, when the scrolling movement comes to a halt
.
Le code ci-dessous vous mettra à jour à chaque fois que le défilement de l'utilisateur est arrêté.
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
if (!decelerate)
{
if (isScrollingStart)
{
isScrollingStart=NO;
[self scrollingStopped];
}
}
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
if (isScrollingStart)
{
isScrollingStart=NO;
[self scrollingStopped];
}
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
isScrollingStart=YES;
}
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
isScrollingStart=YES;
}
-(void)scrollingStopped
{
NSLog(@"Scrolling stopped");
}
UITableView est conforme à UIScrollViewDelegate. Veuillez vous reporter à la documentation de ce protocole, il contient les méthodes dont vous avez besoin.
Après avoir utilisé la réponse de shanegao et le commentaire de Jovan Stankovic, j’ai conçu cela pour Swift3 -
extension NMViewController: UIScrollViewDelegate {
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
if !decelerate {
scrollViewDidEndDecelerating(scrollView)
}
}
func scrollViewDidScrollToTop(_ scrollView: UIScrollView) {
scrollViewDidEndDecelerating(scrollView)
}
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
// Your logic to handle after scrolling is done
}
}