2011-01-05 7 views
11

Próbuję zaimplementować okrągły przycisk podobny do regulacji głośności. Obecnie mogę wykryć przeciągnięcia przy pomocy Gesture Recognizer. Jak mogę wykryć okrągły przycisk (zgodnie z ruchem wskazówek zegara i przeciwnie do ruchu wskazówek zegara) na przycisku? Dzięki!Jak wykrywać cykliczny gest za pomocą Gesture Recognizer?

Odpowiedz

15

Szukasz gestu jednodotykowego (np. Suwaka kołowego) lub gestu dotykowego (jak chwytanie i obracanie pokrętła w rzeczywistym świecie)? Jeśli to drugie, spójrz na UIRotationGestureRecognizer.

Jeśli to pierwsze, jesteś prawie sam. Z pewnością możesz zaimplementować swoje rozwiązanie jako własny, niestandardowy aparat rozpoznawania gestów: jest to oczekiwane przez firmę Apple i jest tam some documentation to get you started (chociaż nie widziałem tam wielu działających przykładów). Zobacz także How to correctly subclass UIGestureRecognizer.

Jako ogólną wytyczną, że myślę regionu dla gestu kształcie toroidalnym: strefę z centrum C, wewnętrzny promień r1 i zewnętrznym promieniu r2 . Po zejściu użytkownika można obliczyć odległość od c za pomocą twierdzenia Pitagorasa, a kąt ze swoją ulubioną funkcją trygonometryczną. Dzięki temu możesz określić, czy dotknięcie znajduje się w strefie. Podczas przeciągania użytkownika można zaktualizować wartość kontrolną na podstawie kąta. W pewnym momencie albo dotkną, albo przeciągną poza strefę, a to zakończy gest. Proponuję, aby dotknięcie zniknęło dość daleko wewnątrz r1 lub poza r2: palce są niedokładnymi narzędziami.

+0

Gest jednoprzyciskowego (jak okrągłym suwakiem). – ohho

+0

W takim razie Apple nie ma aż tak dużo rozwiązania w puszkach. Jak sugeruje Alexsander Akers, pisanie własnego rozpoznawania może być drogą do zrobienia. Wkrótce dokonam edycji mojej odpowiedzi. –

+1

Bardzo podoba mi się rozwiązanie pączków !! : D –

0

Czy próbowałeś już pisać swój własny aparat rozpoznawania gestów? W dokumentach znajdują się szczegółowe instrukcje.

0

Najlepszą metodą byłoby zaimplementowanie Custom Gesture Recognizer. Nie wiem, czy chcesz wykryć dyskretny gest (metoda obsługi zdarzenia byłaby wywoływana po wykryciu pełnego koła) lub ciągły gest (metoda obsługi zdarzeń byłaby wywoływana za każdym razem, gdy przesuwałbyś palcem po okrągłej ścieżce).

Prawdopodobnie użytkownik nie może narysować idealnego koła, a rozwiązanie dostarczone przez @Sixten Otto byłoby dobre.

6

Jako, że nie udało mi się znaleźć rozwiązania, a dzięki logicznej inspiracji z odpowiedzi @ sixtena, poszedłem i stworzył coś użytecznego, nie jest to punktor kuloodporny, ale wydaje się, że teraz zrobię to, czego potrzebuję.

Proszę ktoś, widelec to, klon to użyj go poprawić, to open source, tu jest mój związek repo:

https://bitbucket.org/danielphillips/dpcirculargesturerecognizer

+1

Hej Daniel, dzięki za kod. Byłoby wspaniale, gdyby istniał plik licencji lub licencje do kodu, tylko do celów księgowych. – farski

+0

Zajrzę do tego – Daniel

+0

@Daniel - świetnie, właśnie wypróbowałem i działa całkiem dobrze! :) – sabiland

Powiązane problemy