2012-06-24 8 views
5

Zamiast skalowania, które, jak sądzę, zwykle używam gestu szczypania, staram się wykryć, czy szczypta była szczypią w porównaniu do szczypania, więc mogę zwinąć lub rozwinąć niektóre sekcje tabeli. Jak mam to zrobić?Jak wykrywać szczypanie w geście a uszczypnąć gest?

+0

Jest znacznie lepiej użyć .velocity, które (oczywiście!) Jest dodatnie lub ujemne w zależności od sposobu ty idziesz. Poniższe odpowiedzi są bzdurne. – Fattie

Odpowiedz

7

Cóż, wydaje się to łatwe. Klasa UIPinchGestureRecognizer ma tylko dwie właściwości: , scale i velocity. Wydaje się logiczne, że ujemny scale oznaczałby wewnętrzne szczypnięcie, a pozytywne scale zewnętrzne szczypanie.

UWAGA: "negatyw" może wprowadzać w błąd. "Mniejsze" to 0.0 < scale < 1.0, "większy" to scale > 1.0.

+0

hmm szczypanie daje mi także ujemną skalę? fyi im przy użyciu szczypania przeciągniętego z storyboardu, ze skalą ustawioną na 1 i opóźnionym końcem zaznaczonym i opóźnionym rozpoczyna się odznaczone – user1337645

+1

Niemożliwe. Wątpię, żeby szczypanie dawało ci ujemną skalę. Sprawdź i opisz, jak uzyskać ten wynik. – Mundi

+3

szczypanie do wewnątrz powoduje, że skala zaczyna się od 1,0 i zmniejsza się do 0.0, a szczypanie na zewnątrz powoduje, że skala zaczyna się od 1,0, a następnie zwiększa się. –

2

Mieliście rację, patrząc na własność wagi, ale zmienia ona wartość 1, a nie zero.

 
    - (BOOL) pinchWasOutwards:(UIGestureRecognizer *)gestureRecognizer 
    { 
     return gestureRecognizer.scale > 1; 
    } 
+0

Po prostu użyj .velocity, czyli o wiele więcej KISS. – Fattie

10

Właściwość "skala" jest mniejsza niż 1 dla gestu zszycia i większa niż 1 dla zsuwania się. Dzieje się tak w przypadku wszystkich uszczypnięć dwoma palcami.

Zauważyłem też, że jeśli uszczypnę się pięcioma palcami (co jest skrótem, aby zminimalizować do domu), wartość skali wynosi dokładnie 1.0 - za każdym razem. Ale nie jest to obsługiwane przez żadną dokumentację Apple, o której wiem.

Można eksperymentować jakie wartości idą po prostu położyć NSLog w selektorze obsługi pinch

NSLog(@"Scale: %.2f | Velocity: %.2f",pinch.scale,pinch.velocity);