2009-04-05 15 views
7

Ho un UIScrollView con immagini al suo interno. Quando l'utente raggiunge l'ultima immagine e fa scorrere il dito per l'immagine successiva, voglio mostrare la prima immagine. Allo stesso modo, quando l'utente è alla prima immagine e scorre per l'immagine precedente, voglio mostrare l'ultima immagine. In breve, sarà una sorta di cosa circolare.UIScrollView circolare

Come posso implementarlo?

risposta

6

Avrai bisogno di lavorare con contentOffset e contentSize.

Ogni volta che si verifica un evento di scorrimento, è possibile considerare di verificare se l'utente è a dire currentLength - 1 e, in tal caso, aggiungere dinamicamente un'immagine allo scrollview.

Questo dovrebbe funzionare per essere 5, anche se potresti metterti nei guai in termini di memoria se non rilascii le immagini precedenti.

Non credo che questa soluzione funziona con le immagini meno di indice 0.

alternativa ... Diciamo che avere immagini I1 a I5. Layout a scorrimento con le seguenti immagini: I5 I1 I2 I3 I4 I5 I1

Scorrimento automatico su I1 (altezza di I5), senza animazione.

Se l'utente scorre mai sopra questo segno, lo esegue automaticamente (senza animazione) fino alla seconda coppia I5 I1. Se l'utente tenta di scorrere sotto I5 vicino alla fine, è possibile scansionarli nuovamente alla prima coppia I5 I1. Se si scorre senza animazione e all'altezza corretta, sembrerà che le immagini siano infinite.

Im non sono sicuro se questo sarà molto reattivo, ma potrebbe dare l'effetto per il quale stai cercando.

+0

Questo è praticamente quello che ho fatto in una delle mie app. Funziona bene. –

+3

Questo non funziona se è necessario che il movimento della vista sia continuo. A meno che tu non possa scorrere da qualche parte con una velocità specifica. – Dimitris

+0

Questa soluzione funziona correttamente con il paging abilitato. – redent84

2

La cosa fondamentale da comprendere è che UIScrollView è molto intelligente su ciò che ridisegna.

È possibile spostare le sue sottoview in giro e fino a quando le viste che sono visibili sullo schermo non si spostano o non cambiano, non c'è alcun ridisegno. È possibile ripristinare la cornice di qualsiasi vista parziale fuori schermo (e, se necessario, regolare contentOffset) senza causare un ridisegno.

Ovviamente, avere il paging abilitato rende questo molto più semplice, ma sono sicuro che lo si potrebbe fare anche con lo scroll.

È necessario generare le 5 viste aggiungendole come visualizzazioni secondarie e impostare l'offset della vista di scorrimento sul centro del cinque. Mentre scorri la vista a scorrimento, puoi cambiare le sottoview, come un round robin. Non è necessario rimuovere e aggiungere nuovamente i sottoview, è sufficiente ripristinare i frame.

Questo è (a livello semplice) come funziona anche un UITableView: riutilizza un piccolo insieme di visualizzazioni di celle e continua a reimpostare l'offset del contenuto.