2013-12-14 13 views
8

Mam UIScrollView z obrazami i kiedy użytkownik przewija do końca przewijania chcę zaktualizować zawartość. To jest mój kod, aby wykryć, kiedy zostanie osiągnięte dno Scrollview:Wykryj UIScrollview bottom osiągnął

Poniższy kod jest realizowany w scrollViewDidScroll: delegata

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]; 

} 

Moim problemem jest to, że gdy użytkownik przewija do dołu, moja funkcja jest wywoływana kilka razy, ale chcę to nazwać tylko raz. Próbowałem z imagesScrollView.contentOffset.y == scrollViewBottomOffset ale to nie działa, a funkcja nie jest wywoływana

+0

Dodaj flagę stanu odfiltrować dodatkowego połączenia, na przykład, jak if (zdjęciamiPodgląd ma imagesBottomLoadingView dziecko) – xfx

+0

oK, to było takie proste, ale nie sądziłem, że to. Dziękuję Ci! – lubilis

Odpowiedz

2

czy pomyślałeś dodając wartość logiczną. zaktualizuj go, gdy metoda zostanie wywołana po raz pierwszy i być może, gdy użytkownik przewinie kopię zapasową.

0

wdrożyć scrollViewDidScroll: i sprawdzić contentOffset tym, że dla osiągnięcia końca

+0

Kod jest już w tej metodzie, ale już rozwiązany, dziękuję! – lubilis

+1

ok ... proszę wspomnieć, że napisałeś swój kod w delegacji 'scrollViewDidScroll:', aby uniknąć jakichkolwiek nieporozumień – 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

Jeśli chcesz, aby wykryć je w SWIFT:

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

Czasami trzeba użyć +1 w stanie ponieważ contentSize.height daje kilka dziesiętnych skończy, więc jeśli używasz tego uniknąć to ...

override func scrollViewDidScroll(scrollView: UIScrollView) { 

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