2013-12-14 12 views
8

Ich habe eine UIScrollView mit Bildern und wenn der Benutzer zum Ende der Scrollview scrollt ich möchte den Inhalt zu aktualisieren. Dies ist mein Code zu erkennen, wenn der Boden des Scroll erreicht:Detect UIScrollview Boden erreicht

Der folgende Code in scrollViewDidScroll: Delegat implementiert

CGFloat scrollViewHeight = imagesScrollView.bounds.size.height; 
CGFloat scrollContentSizeHeight = imagesScrollView.contentSize.height; 
CGFloat bottomInset = imagesScrollView.contentInset.bottom; 
CGFloat scrollViewBottomOffset = scrollContentSizeHeight + bottomInset - scrollViewHeight; 

if(imagesScrollView.contentOffset.y > scrollViewBottomOffset){ 


    [imagesView addSubview:imagesBottomLoadingView]; 

    [self downloadImages]; 

} 

Mein Problem ist, dass, wenn der Benutzer scrollt nach unten, meine Funktion mehrere genannt mal, aber ich möchte es nur einmal anrufen. Ich habe versucht, mit imagesScrollView.contentOffset.y == scrollViewBottomOffset aber es funktioniert nicht und die Funktion nicht

+0

eine Bedingung Flag Fügen Sie zusätzlichen Aufruf zu filtern, zum Beispiel, wie, wenn (Bilder Kind imagesBottomLoadingView haben) – xfx

+0

ok, es so einfach war, aber ich dies nicht denken. Vielen Dank! – lubilis

Antwort

2

Kennen Sie das Hinzufügen eines boolean dachte genannt wird. Aktualisieren Sie es, wenn die Methode das erste Mal aufgerufen wird, und vielleicht, wenn der Benutzer zurückscrollt.

0

implementieren scrollViewDidScroll: und prüfen Sie, dass contentOffset für das Erreichen des Endes

+0

Der Code ist bereits in dieser Methode, aber ich habe bereits gelöst, danke! – lubilis

+1

ok ... bitte erwähnen Sie, dass Sie Ihren Code in 'scrollViewDidScroll:' delegate geschrieben haben, um Verwirrung zu vermeiden – samfisher

3
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
{ 
    float bottomEdge = scrollView.contentOffset.y + scrollView.frame.size.height; 
    if (bottomEdge >= scrollView.contentSize.height) 
    { 
     // we are at the end 
    } 
} 
16

Wenn Sie sie in geschickter erkennen wollen:

override func scrollViewDidScroll(scrollView: UIScrollView) { 

if (scrollView.contentOffset.y >= (scrollView.contentSize.height - scrollView.frame.size.height)) { 
    //reach bottom 
} 

if (scrollView.contentOffset.y < 0){ 
    //reach top 
} 

if (scrollView.contentOffset.y >= 0 && scrollView.contentOffset.y < (scrollView.contentSize.height - scrollView.frame.size.height)){ 
    //not top and not bottom 
}} 
0

Manchmal müssen Sie +1 in den Zustand verwenden, da die contentSize.height Sie ein paar Dezimalstellen über gibt, also wenn Sie verwenden damit vermeiden Sie es ...

override func scrollViewDidScroll(scrollView: UIScrollView) { 

    if (scrollView.contentOffset.y + 1) >= (scrollView.contentSize.height - scrollView.frame.size.height) { 
     //bottom reached 
    } 
}