2009-04-24 6 views
5

Vorrei riprodurre il comportamento di scorrimento a scorrimento di UIScrollView, ma non voglio usare (o non posso usare) quella classe. Cosa posso fare?Come posso riprodurre il comportamento di scorrimento a scorrimento di iPhone UIScrollView nella mia visualizzazione personalizzata?

+0

Nota: la domanda riguardava una vista OpenGL – Thanks

+0

Vero, nel mio caso mi stavo pensando alle viste OpenGL. Tuttavia, vedi la mia risposta a Roger Nolan qui sotto - Penso che ci siano molti casi interessanti non OGL. –

risposta

8

Ok, ho risposto a questo implementando la mia libreria personale che cattura le dinamiche di UIScrollView.

Ciò che è utile sul mio codice è che è indipendente dal sistema di coordinate, dalla velocità di animazione e dalle particolari classi dell'interfaccia utente che si stanno utilizzando. Può essere facilmente annidato in una classe di visualizzazione personalizzata di tua scelta.

Il comportamento del flick-to-scroll predefinito dell'iPhone è interessante. Se si tiene premuto il dito per un lungo periodo e lo si sposta in una varietà di direzioni, si noterà che solo l'ultima direzione viene utilizzata per calcolare il movimento di scorrimento.

Se provate a creare questo codice da soli, tuttavia, scoprirete rapidamente che semplicemente utilizzando gli ultimi due punti per calcolare la direzione del movimento non lo taglierà. Invece, il mio codice mantiene una breve cronologia di tocchi e utilizza l'interpolazione lineare per determinare dove il tocco "sarebbe stato" un po 'di tempo fa. Questo punto interpolato viene utilizzato come base per calcolare il vettore di movimento. Questo porta ad un'interazione molto piacevole.

Il codice è disponibile su github, qui: http://gist.github.com/100855. È rilasciato sotto la licenza BSD.

+0

Hai risposto alla tua stessa domanda - con un codice piuttosto complicato - entro 2 minuti dal chiederlo? È un codice interessante, quindi OK! –

+0

Sì, non sapevo se quello era kasher per Stack Overflow ma da quando ho scoperto che non sono l'unico a cercarlo, ho pensato che sarebbe stato utile? C'è un forum migliore? –

0

Quindi, per quanto riguarda UIScrollView non ha funzionato? Questa classe è abbastanza flessibile ...

+0

Ho una vista OpenGL per un gioco e volevo essere in grado di controllare il viewport in modo simile a quello di UIScrollView ... –

0

Dave, vedo che hai answerd alla tua domanda con un po 'di codice, ma, non impostando la seguente darvi quello che vi serve:

myScrollView.bounces = YES; 
myScrollView.pagingEnabled = YES; 
myScrollView.directionalLockEnabled = YES; 

In particolare, sembra che tu abbia reimplementato directionLockEnabled. Forse capire il motivo per cui non è possibile utilizzare UIScrollView è il problema più interessante :-)

+0

Vedere il mio commento sopra. Sto cercando di riprodurre il comportamento in un contesto in cui UIScrollView non può andare (o, almeno, non dovrebbe andare.) –

+0

(E: dovrei sottolineare che quello che ho fatto NON è lo stesso di impostare solo alcune proprietà su una vista di scorrimento Se fosse quello che dovevo fare - beh, l'avrei fatto. :-) –

+0

... e mi interessa cosa sia ;-) –

0

Questo è bello! L'ho usato in un'app in cui la mia vista scorrevole è valida per un giorno di dati grafici in un intervallo dal 1902 al 2037, quindi un UIScrollView non sarebbe efficiente.