2009-07-10 8 views
11

Jak wykonać gesty szczypania na telefonie iPhone? Zdaję sobie sprawę z używania zdarzeń dotykowych na iPhonie, ale jestem bardzo leniwy i nie chcę ponownie wymyślać koła pod kątem czegoś tak rozpowszechnionego jak gesty PINCH ... Kod źródłowy lub linki do nich byłyby pomocne.Jak wykonywać gesty szczypania na iPhonie?

+1

zobacz tę próbkę na powiększeniu zbliżeniowym http://cocoabugs.blogspot.com/2011/03/pinch-zoom-using-uipinchgesturerecogniz.html –

Odpowiedz

8

Musisz to zaimplementować samodzielnie, używając podstawowej matematyki.

(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event; 
(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event; 

To są metody delegatów, które należy zastosować w swojej aplikacji.

Musisz uzyskać odległość między dwoma dotknięciami, a następnie obliczyć zmiany odległości we własnym kodzie.

Matematyczne równanie użyć, aby uzyskać dystans nazywa się dot product

Chcę tylko podkreślić, że równanie używają w cytowanym tutorialu jest nieprawidłowy. Zaktualizowałem go tak, aby zawierał bezwzględną wartość pominiętą w samouczku.

Jest to iloczyn skalarny:

- (CGFloat)distanceBetweenTwoPoints:(CGPoint)fromPoint toPoint:(CGPoint)toPoint 
{ 
    float xDist = fromPoint.x - toPoint.x; 
    float yDist = fromPoint.y - toPoint.y; 

    float result = sqrt(pow(xDist,2) + pow(yDist,2)); 
    return result; 
} 

Edit: Popełniłem błąd w mojej poprzedniej odpowiedzi .... to było dawno zrobiłem żadnej z tego rodzaju matematyki.

Jeśli nie wyzerujesz pierwiastka, nie uzyskasz prawdziwej odległości między punktami. Nazywa się to obliczaniem wielkości między dwoma wektorami.

To jest właściwy sposób, aby to zrobić. Jeśli chcesz pominąć sqrt, nie będziesz miał dokładnej odległości między dwoma punktami.

Jeśli nie wyrównasz odpowiedzi, Twój kod będzie działał, ale będzie korzystał z pomiarów znacznie większych niż rzeczywiste wartości. Tak więc w przyszłości, jeśli chcesz uzyskać odległość między dwoma punktami, zwróci to około 90000 zamiast rzeczywistej odległości pikseli, która wynosi 300px.

+0

Ummm ...Nie jestem pewien, ile linku, o który wspomniałeś, przyda się, ale dzięki za odpowiedź przynajmniej ... – RexOnRoids

+0

Bez tego nie możesz obliczyć odległości między dwoma dotknięciami. To jest istotne. –

+0

Thx - Kod źródłowy jest znacznie łatwiejszy do zrozumienia w tym przypadku. Nie byłam gotowa usiąść i usiłować zaabsorbować całą stronę wiki na temat zawiłości "produktu kropkowego" LOL – RexOnRoids

1

Jeśli szukasz prostego przykładowego gestu szczypania, używam metody opisanej przez Brocka w przykładowej aplikacji I describe here (w drugiej do ostatniej i ostatniej wersji aplikacji na tej stronie). Gesty szczypania służą do skalowania kilku warstw Core Animation w tym przykładzie.

Wszystko, co opisuje, aż do obliczenia odległości, to po prostu twierdzenie Pitagorasa zastosowane pomiędzy dwoma punktami (przy odległościach X i Y jako dwóch ścianach trójkąta prostokątnego).

6

hmmm ..... wydaje się, że niektórzy ludzie są bardzo zdezorientowani, jak używać podstawowej matematyki. produkt kropkowany jest całkowicie bezpodstawny i tylko myli problemy. pomiędzy dwoma wektorami stosuje się punkt pomiarowy między dwoma wektorami, aby obliczyć kąt między nimi.

Musisz użyć twierdzenia pythagorus. Dot nie ma nic wspólnego ze znalezieniem odległości między punktami - tylko pythagorous!

+0

kropka może być używana do znalezienia odległości między dwoma punktami przez: sqrt (kropka (p2-p1, p2-p1)) – twerdster

8

Nie ma wątpliwości, że przedstawione tutaj rozwiązania są przestarzałe, na korzyść używania nowej klasy UIPinchGestureRecognizer w systemie iOS 3.2 i nowszych wersjach.

+2

To nie jest tak istotne, o ile istnieje mnóstwo <3,2 urządzenia tam. – Jonny