2013-08-12 5 views
5

Ich habe eine Tabellenansicht, die eine Animation ausführt, wenn der Benutzer auf einem UITableView scrollt (Daumen nach oben) und eine andere Animation, wenn der Benutzer nach oben auf einem UITableView scrollt .Erkennen der unteren "Bounce" von UITableView

Das Problem ist, wenn der Benutzer den Boden eines UITableView erreicht und springt, registriert die Tabelle eine Aufwärts- und dann Abwärtsbewegung und damit die Animation, wenn es nicht sollte.

Das gleiche genaue Verhalten passiert beim Scrollen nach oben; aber ich bin in der Lage, es zu erkennen, wie so:

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { 

    self.lastContentOffset = scrollView.contentOffset; 

} 


-(void) scrollViewDidScroll:(UIScrollView *)scrollView { 

    // Check if we are at the top of the table 
    // This will stop animation when tableview bounces 

    if(self.tableView.contentOffset.y < 0){ 
     // Dont animate, top of tableview bounce 


    } else { 

     CGPoint currentOffset = scrollView.contentOffset; 

     if (currentOffset.y > self.lastContentOffset.y) { 

      // Downward animation 
      [self animate:@"Down"]; 

     } else { 

      // Upward 
      [self animate:@"Up"]; 

     } 

     self.lastContentOffset = currentOffset; 

    } 

} 

Das funktioniert perfekt, aber für das Leben von mir kann ich nicht herausfinden, ein, wenn die Bedingung den Boden als auch zu erkennen. Ich bin sicher, es ist einfach und ich kann es nicht herausfinden.

Antwort

28

Wie sei es etwa so:

if (self.tableView.contentOffset.y >= (self.tableView.contentSize.height - self.tableView.bounds.size.height)) 
{ 
    // Don't animate 
} 
+0

Das war's! Ich hätte schwören können, dass ich es versucht habe, aber es ist sehr wahrscheinlich, dass ich meine Operatoren vermasselt habe. Danke vielmals! –

+5

Sie müssen contentInset berücksichtigen. Wenn es auf etwas größer als Null gesetzt ist, wird dies nicht funktionieren. Verwenden Sie stattdessen: 'if (self.tableView.contentOffset.y - self.tableView.contentInset.bottom> = selbst.tabellensicht.contentSize.height - self.tableView.bounds.size.height)'. Dies funktioniert auch für alle Unterklassen von UIScrollView (UICollectionView und UITableView). –

+0

Dies funktioniert NICHT mit Storyboard- und Größenklassen. Überprüfen Sie meine Antwort hier. – Ashok

0

In der heutigen Zeit (Xcode 7), unter Code sollte die meisten Anwendungsfälle lösen, da es für UIScrollView-Konten (und deren Unterklassen UITableView und UICollectionView) Einsätze, einzelne Storyboard für mehrere Geräte (dh Größenklassen) -

PS: Hinweis Int() und == ist wichtig, um ein Ereignis einmal auszulösen.

Verwandte Themen