Czy ktoś może wyjaśnić różnicę wysokiego poziomu między tymi dwoma metodami? W szczególności, kiedy używałbyś jednego z drugim i czy istnieje jakieś pokrywanie się w kategoriach celów tych metod? Wygląda na to, że służą temu samemu celowi, ale nie wydają się być w ogóle powiązane dokumentacją, a to mnie myli.Jaka jest różnica między beginTrackingWithTouch i touchBegan?
Odpowiedz
beginTrackingWithTouch: withEvent:
1) Podklasa UIControl
2) wysyłane do kontroli, gdy dotyk związane z danym wypadku wchodzi granice formantu.
3) Aby zapewnić niestandardowe zachowanie śledzenia (na przykład, aby zmienić wygląd podświetlenia). W tym celu należy zastosować jedną lub wszystkie z następujących metod: beginTrackingWithTouch: withEvent :, continueTrackingWithTouch: withEvent :, endTrackingWithTouch: withEvent:
touchesBegan: withEvent:
1) podklasy UIResponder
2) Informuje odbiornik, gdy co najmniej jeden palec dotyka w widoku lub oknie.
3) Istnieją dwa ogólne rodzaje zdarzeń: zdarzenia dotykowe i zdarzenia ruchu. Podstawowymi metodami obsługi zdarzeń dotyku są dotknięciaBegan: withEvent :, touchesMoved: withEvent :, touchesEnded: withEvent :, i dotykaKanned: withEvent :. Parametry tych metod wiążą dotyku z ich zdarzeniami - zwłaszcza dotykowymi, które są nowe lub uległy zmianie - i tym samym pozwalają obiektom respondentów śledzić i obsługiwać dotknięcia w miarę postępu dostarczanych zdarzeń w fazach sekwencji wielodotykowej. Za każdym razem, gdy palec dotyka ekranu, jest przeciągany na ekran lub podnosi się z ekranu, generowany jest obiekt UIEvent. Obiekt zdarzenia zawiera obiekty UITouch dla wszystkich palców na ekranie lub po prostu z niego uniesionych.
Po dzisiejszym spotkaniu, myślę, że kluczową różnicą jest to, że beginTrackingWithTouch i przyjaciele służą wyłącznie do śledzenia - nie do niczego innego - w szczególności do obsługi celów/akcji. Jeśli więc zastąpisz touchBegan, będziesz także odpowiedzialny za wywoływanie sendActionsForControlEvents po zakończeniu dotknięć. Ale jeśli używasz beginTrackingWithTouch, jest to obsługiwane za darmo.
Odkryłem to, wprowadzając funkcję beginTrackingWithTouch (w przypadku niestandardowego sterowania przyciskami), myśląc, że to tylko boczny zamiennik dla obsługi dotknięćBegan. Tak więc w endTrackingWithTouch wywołałem sendActionsForControlEvents, jeśli touchInside było prawdziwe. Rezultat końcowy był taki, że akcja została wywołana dwukrotnie, ponieważ najpierw mechanizm wbudowany wysłał akcję, a potem ją nazwałem. W moim przypadku po prostu interesuję się dostosowywaniem podświetlania, więc wyłączyłem wywołanie sendActionsForControlEvents i wszystko jest w porządku.
Podsumowanie: użyj beginTrackingWithTouch, gdy wszystko, co musisz zrobić, to dostosować śledzenie i używać touch bebegan, gdy musisz dostosować także obsługę docelową/akcję (lub inne szczegóły niskiego poziomu).
Dobra odpowiedź, dziękuję. – petric
Dzięki. Aby umieścić go w kontekście: Mam niestandardowy formant, który zawiera garść subviews (np. Etykiety). Użytkownik powinien być w stanie przeciągnąć te etykiety dookoła, a one wchodzą ze sobą w interakcję (podczas ruchu) w sposób regulowany przez główną kontrolę (kontener).Którą rodzinę metod dotykowych należy zastosować do implementacji przeciągania: te dostarczane przez UIControl lub te dostarczane przez UIResponder? – rmp251