2009-04-24 8 views
5

Chciałbym odtwarzać zachowanie typu "przewijaj i przewijaj" UIScrollView, ale nie chcę używać (lub nie mogę używać) tej klasy. Co mogę zrobić?W jaki sposób można odtworzyć zachowanie typu "przewijaj i przewijaj" iPhone UIScrollView w moim własnym widoku niestandardowym?

+0

Uwaga: Pytanie dotyczyło widoku OpenGL – Thanks

+0

Prawda, w _my_ przypadku myślałem o widokach OpenGL. Jednak zobacz poniżej moją odpowiedź na Rogera Nolana - myślę, że jest wiele interesujących spraw niezwiązanych z OGL. –

Odpowiedz

8

OK, odpowiedziałem na to, wdrażając własną bibliotekę, która rejestruje dynamikę UIScrollView.

To, co jest przydatne w moim kodzie, to to, że jest on niezależny od układu współrzędnych, szybkości animacji i określonych klas interfejsu użytkownika, z których korzystasz. Można go łatwo zagnieździć w wybranej klasie widoku niestandardowego.

Domyślne zachowanie telefonu podczas przewijania do przodu jest interesujące. Jeśli przytrzymasz palec przez dłuższy czas i poruszasz nim w różnych kierunkach, zobaczysz, że tylko ostatni kierunek jest używany do obliczenia ruchu przewijania.

Jeśli jednak spróbujesz samodzielnie zbudować ten kod, szybko odkryjesz, że samo użycie dwóch ostatnich punktów do obliczenia kierunku ruchu nie spowoduje jego zmniejszenia. Zamiast tego mój kod zachowuje krótką historię dotyku i wykorzystuje liniową interpolację, aby określić, gdzie dotknięcie "byłby" jakiś mały czas temu. Ten interpolowany punkt jest wykorzystywany jako podstawa do obliczania wektora ruchu. Prowadzi to do bardzo przyjemnej interakcji.

Kod jest dostępny na github, tutaj: http://gist.github.com/100855. Jest wydany na podstawie licencji BSD.

+0

Odpowiedziałeś na własne pytanie - z dość wciągającym kodem - w ciągu 2 minut od zadawania pytania? To interesujący kod, więc OK! –

+0

Tak, nie wiedziałem, czy to było koszerne dla Stack Overflow, ale odkąd odkryłem, że nie jestem jedynym, który tego szukał, pomyślałem, że byłoby to pomocne? Czy istnieje lepsze forum? –

0

A co z UIScrollView nie działa dla Ciebie? Że klasa jest dość elastyczny ...

+0

Mam widok OpenGL do gry i chciałem móc kontrolować widok w sposób podobny do UIScrollView ... –

0

Dave, widzę masz answerd swoim pytaniu z kodem, ale nie ustawienie następujących dać ci to, czego potrzebujesz:

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

konkretnie, brzmi, jakbyś ponownie wdrożył directionLockEnabled. Być może zrozumienie, dlaczego nie można użyć UIScrollView, jest bardziej interesującym problemem :-)

+0

Zobacz mój komentarz powyżej. Próbuję odtworzyć zachowanie w kontekście, w którym UIScrollView nie może iść (lub przynajmniej nie powinien iść). –

+0

(I: Powinienem zauważyć, że to, co zrobiłem, NIE jest takie samo, jak ustawienie kilku właściwości w widoku przewijania, jeśli to było to, co musiałem zrobić - cóż, zrobiłbym to. :-) –

+0

... i jestem zainteresowany co to ;-) –

0

To jest fajne! Używałem go w aplikacji, w której przewijany widok to dane graficzne z jednego dnia w zakresie od 1902 do 2037, więc UIScrollView nie byłby wydajny.

Powiązane problemy