pierwszy, zrzeczenie się. Jeśli ustawisz userInteractionEnabled
na NO
na UIScrollView
, żadne wydarzenia dotykowe nie zostaną przekazane do subviews. O ile mi wiadomo, nie ma możliwości obejścia tego z jednym wyjątkiem: przechwytywanie zdarzeń dotyku w superview of UIScrollView
, a konkretnie przekazywanie tych zdarzeń do subviews UIScrollView
. Szczerze mówiąc, nie wiem, dlaczego chciałbyś to zrobić. Jeśli chcesz wyłączyć określoną funkcję UIScrollView (np. ... no, przewijanie), możesz to zrobić wystarczająco łatwo, nie wyłączając UserInteraction.
Jeśli rozumiem Twoje pytanie, potrzebujesz zdarzeń związanych z dotknięciem do przetworzenia przez UIScrollView i przekazanych do subviews? W każdym razie (niezależnie od gestu), myślę, że to, czego szukasz, to metoda protokołu gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer: w protokole UIGestureRecognizerDelegate
. W swoich subviewsach, niezależnie od tego, jaki gest rozpoznajesz, ustaw delegata (prawdopodobnie niezależnie od tego, co klasa ustawia na pierwszym miejscu) w geście rozpoznawania gestów. Zastąp powyższą metodę i zwróć YES
. Teraz ten gest zostanie rozpoznany razem z innymi rozpoznawaczami, które mogą "skraść" ten gest (w twoim przypadku kran). Korzystając z tej metody, możesz nawet dostroić swój kod, aby wysyłać określone rodzaje gestów do podstron lub wysłać gest tylko w określonych sytuacjach. Daje ci dużo kontroli. Tylko pamiętaj, aby przeczytać o metodę, zwłaszcza ta część:
Metoda ta jest wywoływana, gdy rozpoznanie gestu przez obu gestureRecognizer lub otherGestureRecognizer będzie blokować inny gest rozpoznawania od uznając jego gest. Zwróć uwagę, że zwracanie YES na poziomie gwarantuje równoczesne rozpoznawanie; zwracanie NIE, z drugiej strony, nie gwarantuje równoczesnego rozpoznawania , ponieważ delegat innego gestu użytkownika może zwrócić TAK.
Oczywiście, istnieje zastrzeżenie: Dotyczy to tylko rozpoznawania gestów. Możesz więc nadal mieć problemy, jeśli próbujesz użyć touchesBegan:
, touchesEnded
itd., Aby przetworzyć dotknięcia. Możesz oczywiście użyć hitTest:
, aby wysyłać surowe wydarzenia dotykowe do subskrybentów, ale dlaczego? Dlaczego przetwarzać zdarzenia za pomocą tych metod w UIView
, kiedy można dołączyć do widoku UIGestureRecognizer
i uzyskać całą tę funkcjonalność za darmo? Jeśli potrzebujesz detali przetworzonych w taki sposób, że żaden standard nie może dostarczyć , podklasę UIGestureRecognizer
i przetworzyć tamte dotknięcia. W ten sposób uzyskasz całą funkcjonalność urządzenia UIGestureRecognizer
wraz z własnym niestandardowym przetwarzaniem dotyku. Naprawdę uważam, że Apple ma zamiar zastąpić większość (jeśli nie wszystkie) niestandardowego kodu przetwarzania dotykowego, którego deweloperzy używają pod numerem UIView
. Pozwala na ponowne użycie kodu i dużo łatwiej jest sobie z nim radzić, gdy łagodzi to, jaki kod przetwarza dane zdarzenie dotykowe.
Ustawienie userInteractionEnabled NO i oczekując dane interakcji użytkownika wydaje się wszechświata rozbicia paradoksu. – borrrden
Czy chcesz rozróżnić dotyk od zwoju? – shannoga