2013-12-14 5 views
8

Ho un UIScrollView con immagini e quando l'utente scorre fino alla fine della scrollview voglio aggiornare il contenuto. Questo è il mio codice per rilevare quando si raggiunge il fondo del ScrollView:Rileva UIScrollview fondo raggiunto

Il codice di seguito viene implementata in scrollViewDidScroll: delegato

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

} 

mio problema è che quando l'utente scorre verso il basso, la mia funzione è chiamato diversi volte, ma voglio chiamarlo solo una volta. Ho provato con imagesScrollView.contentOffset.y == scrollViewBottomOffset ma non funziona e la funzione non viene chiamata

+0

Aggiungi una bandiera condizioni per filtrare chiamate in più, per esempio, come se (immaginiVista ha imagesBottomLoadingView bambino) – xfx

+0

ok, era così facile, ma non ho pensato questo. Grazie! – lubilis

risposta

2

Avete pensato di aggiungere un valore booleano. aggiornalo quando il metodo viene chiamato per la prima volta e forse quando l'utente esegue il backup.

0

implementare scrollViewDidScroll: e verificare contentOffset in quella per raggiungere la fine

+0

Il codice è già in questo metodo, ma ho già risolto, grazie! – lubilis

+1

ok ... per favore ricorda che hai scritto il tuo codice in 'scrollViewDidScroll:' delegato per evitare qualsiasi confusione – 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

Se si desidera rilevare loro in rapida:

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

A volte si dovrà utilizzare uno nella condizione perché il contentSize.height ti dà pochi decimali sopra, quindi se si utilizza questo, si evitarlo ...

override func scrollViewDidScroll(scrollView: UIScrollView) { 

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