UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapTapTap:)];
[self.view1 addGestureRecognizer:tapGesture];
[self.view2 addGestureRecognizer:tapGesture];
[tapGesture release];
W powyższym kodzie view2
są rozpoznawane tylko dotknięcia . Jeśli skomentuję trzecią linię, wówczas view1
rozpoznawane są stuknięcia . Jeśli mam rację i możesz użyć rozpoznawania gestów tylko raz, nie jestem pewien, czy to błąd, czy też potrzebuje trochę dodatkowej dokumentacji.
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didPressed:)]; [self.view1 addGestureRecognizer:tapRecognizer]; [self.view2 addGestureRecognizer:tapRecognizer];
wyjściowy 1 nie ma tablicy rozpoznawania gestów; view2 ma tablicę rozpoznawania gestówObejrzałem to, korzystając z poniższego.
Następnie w metodzie handleLongPress po prostu ustawiam przycisk UIB równy widokowi rozpoznawania gestów i rozgałęziam to, co robię na podstawie tego przycisku
źródło
W przypadku Swift 3, jeśli ktoś tego wymaga: na podstawie Bhavik Rathod Odpowiedź powyżej.
źródło
getGestureRecognize
ponieważ to właśnie pełni ta funkcjaMożemy zrobić coś takiego, to łatwe i proste
1) utwórz w kontrolerze funkcję jak poniżej (ta funkcja zwróci GestureRecognizer)
2) ustaw teraz ten moduł rozpoznawania w wielu widokach
źródło
setNumberOfTapsRequired:1
nie jest koniecznaNie, nie należy dołączać rozpoznawania gestów do więcej niż jednego widoku.
Dokumentacja Apple zawiera te wyraźne informacje:
Podręcznik obsługi zdarzeń dla systemu iOS - Gogure Recognizers Apple Developer Library
Podczas gdy, jak wspominają inni, mogą one działać w niektórych przypadkach, jest to wyraźnie sprzeczne z dokumentacją i może ulec zmianie w każdej przyszłej wersji iOS.
Możesz dodać osobne rozpoznawanie gestów do widoków, które chcesz monitorować, i mogą one dzielić wspólną akcję.
źródło
Cóż, jeśli ktoś nie chce kodować dodawania widoku gestów dla wielu przycisków, takich jak kwalker odpowiedział powyżej, i chce to zrobić za pomocą Konstruktora interfejsów, może to ci pomóc.
1) Możesz dodać Rozpoznawanie gestów Długie naciśnięcie z Biblioteki obiektów, tak jak dodajesz inne obiekty, takie jak UIButtons i UILabels.
Początkowo użyłem tylko jednego
2) Ustaw odnośniki do
UIButton
i wysyłaj akcje z właścicielem pliku.źródło
jeśli masz stały widok, sugeruję zrobienie czegoś takiego
w ten sposób zmniejszy się wiele różnych bezużytecznych zmiennych
źródło
Możesz utworzyć ogólne rozszerzenie, aby łatwo dodawać rozpoznawanie gestów. To tylko przykład, ale może tak wyglądać
Aby dodać rozpoznawanie 2 tapów w widoku, do którego chcesz zadzwonić:
Możesz także łatwo dodać rozpoznawanie przeciągnięć
i tak dalej. Pamiętaj tylko, że cel musi być powiązany z selektorem.
źródło
Zastąp klasę przez „
<UIScrollViewDelegate>
”I użyj tej metody w klasie .m:
Ta metoda pomoże Ci włączyć wielokrotne przesunięcie w jednym widoku.
źródło
Co powiesz na ponowne zapisanie (odtworzenie) swojego GestureRecogni za każdym razem, gdy dodasz rozpoznawanie gestów wskazujące na ten sam func. W poniższym przypadku to działa. Korzystam z IBOutletCollection
Swift 2:
źródło
Możesz to zrobić za pomocą tego kodu moje widoki, które są widokami obrazów w xib.
źródło
500
do wszystkich tagów widoków, a następnie odejmowania500
? Dlaczego po prostu nie zacząć tagów1
(a nawet0
) zamiast501
?1
jego, właśnie skopiowałem ten kod z mojej aplikacji, z której go otrzymuję501
. Ale tak, nie dawaj0
bcoz, gdzieś czytałem, że zawsze wskazuje to na widok rodzica, więc stworzy to komplikację, uwierz mi, że się z tym zmierzyłem.