2012-02-25 9 views
5

Ho un UIScrollView con dimensioni del contenuto di 1200x480. Ho alcune immagini panoramiche su di esso, la cui larghezza è pari a 600. Quando scorri verso destra, semplicemente aumento la dimensione del contenuto e imposta l'offset in modo da rendere tutto più fluido (voglio quindi aggiungere altre immagini, ma non è importante proprio adesso). Quindi, in pratica, le immagini attualmente nel viewport rimangono da qualche parte a sinistra, eventualmente da rimuovere dalla superview.Scorrimento orizzontale infinito UIScrollView

Ora, il problema che si verifica quando si scorre verso sinistra. Quello che faccio è spostare le immagini alla fine della dimensione del contenuto (quindi aggiungere 600 a ogni origine della vista dell'immagine.x), quindi impostare l'offset del contenuto di conseguenza. Funziona quando il dito è sullo schermo e l'utente trascina (scrollView.isTracking = YES). Quando l'utente scorre verso sinistra e lascia andare (scrollView.isTracking = NO), le visualizzazioni dell'immagine si spostano troppo velocemente verso destra e scompaiono quasi istantaneamente. Qualcuno sa come posso far muovere le immagini bene e non scomparire nemmeno quando l'utente non trascina manualmente la vista e ha già lasciato andare?

Ecco il mio codice per trascinare in senso orizzontale:

-(void) scrollViewDidScroll:(UIScrollView *)scrollView { 
    CGPoint offset = self.scrollView.contentOffset; 
    CGSize size = self.scrollView.contentSize; 

    CGPoint newXY = CGPointMake(size.width-600, size.height-480); 

    // this bit here allows scrolling towards the right 
    if (offset.x > size.width - 320) { 
     [self.scrollView setContentSize:CGSizeMake(size.width+320, size.height)]; 
     [self.scrollView setContentOffset: offset]; 
    } 

    // and this is where my problem is: 
    if (offset.x < 0) { 
     for (UIImageView *imageView in self.scrollView.subviews) { 
      CGRect frame = imageView.frame; 
      [imageView setFrame:CGRectMake 
       (frame.origin.x+newXY.x, frame.origin.y, 200, frame.size.height)]; 
     } 
     [self.scrollView setContentOffset:CGPointMake(newXY.x+offset.x, offset.y)]; 
    } 
} 

EDIT: Questo è ora di lavoro - ho dato un'occhiata alla StreetScroller ed è tutto bene adesso.

Tuttavia, ora desidero ingrandire lo scrollview, ma viewForZoomingInScrollView non viene mai chiamato. Non è possibile aumentare lo zoom su una scrollview con una dimensione di contenuto elevata?

+0

qualcuno, per favore? :) –

risposta

5

Ci sono alcuni approcci che fluttuano qui intorno. Basta usare la ricerca del sito ...

Se si desidera un esempio più "ufficiale" creato da Apple, dare un'occhiata allo StreetScroller Demo. Per ulteriori informazioni su questo esempio, dare un'occhiata agli ultimi anni della sessione WWDC n. 104 Tecniche avanzate di visualizzazione a scorrimento.

V'è anche una sottoclasse UIScrollView su Github chiamato BAGPagingScrollView, che non esegua il paging & infinita, ma ha qualche bug si deve risolvere da soli, perché non è in fase di sviluppo attivo (in particolare il metodo goToPage: porta a problemi) .

+0

Grazie :) Ho dato un'occhiata a StreetScroller e funziona perfettamente usando solo il metodo recenterIfNecessario. –

+0

Felice di essere qui! – dom

+0

Grazie :) Voglio ingrandire la mia scrollview, ma viewForZoomingInScrollView non viene mai chiamato. Ho impostato userInteractionEnabled su YES. –