Umieściłem obraz (UIImageView) na pasku nawigacyjnym. Teraz chcę wykryć zdarzenie dotyku i obsłużyć zdarzenie. Czy możesz dać mi znać, jak mam to zrobić?
Dzięki.
ios
iphone
uiimageview
uitouch
ebaccount
źródło
źródło
Odpowiedzi:
W praktyce nie rób tego.
Zamiast tego dodaj przycisk ze stylem niestandardowym (bez grafiki przycisku, chyba że określisz obrazy) w UIImageView. Następnie dołącz dowolne metody, które chcesz do tego wywołać.
Możesz użyć tej techniki w wielu przypadkach, w których naprawdę chcesz, aby jakiś obszar ekranu działał jak przycisk, zamiast bawić się dotykiem.
źródło
A
UIImageView
wywodzi się z aUIView
który pochodzi z,UIResponder
więc jest gotowy do obsługi zdarzeń dotykowych. Będziemy chcieli, aby zapewnićtouchesBegan
,touchesMoved
oraztouchesEnded
metody i skąd będą wywoływane, gdy użytkownik kliknie obraz. Jeśli chcesz tylko zdarzenia dotknięcia, łatwiej jest po prostu użyć niestandardowego przycisku z obrazem ustawionym jako obraz przycisku. Ale jeśli chcesz mieć dokładniejszą kontrolę nad stuknięciami, ruchami itp., To jest droga.Będziesz także chciał przyjrzeć się kilku innym rzeczom:
Zastąp
canBecomeFirstResponder
i zwróć TAK, aby wskazać, że widok może stać się punktem skupienia zdarzeń dotykowych (domyślnie NIE).Ustaw
userInteractionEnabled
właściwość na TAK. Wartość domyślna dlaUIViews
to TAK, ale dlaUIImageViews
jest NIE, więc należy ją wyraźnie włączyć.Jeśli chcesz reagować na zdarzenia wielodotykowe (np. Szczypanie, powiększanie itp.), Wybierz ustawienie
multipleTouchEnabled
TAK.źródło
userInteractionEnabled
TAK w widoku rodzica. Zobacz stackoverflow.com/questions/5887305/…Aby dodać zdarzenie dotyku do UIImageView, użyj następujących elementów w pliku .m
mam nadzieję, że to pomoże.
źródło
Możesz również dodać UIGestureRecognizer. Nie wymaga dodawania dodatkowego elementu w hierarchii widoków, ale nadal zapewnia cały ładnie napisany kod do obsługi zdarzeń dotykowych z dość prostym interfejsem:
źródło
W ciągu ostatnich kilku godzin byłem w różnych wątkach, próbując znaleźć rozwiązanie mojego problemu, ale bezskutecznie. Widzę, że wielu deweloperów podziela ten problem i myślę, że ludzie tutaj o tym wiedzą. Mam wiele obrazów w środku
UIScrollView
, próbując uzyskać na nich zdarzenia dotknięcia.nie otrzymuję żadnych zdarzeń z obiektu
UIImangeView
, ale otrzymuję zdarzenie z podobnegoUILable
z bardzo podobnymi parametrami, które ustawiam. pod IOS 5.1.Wykonałem już następujące czynności:
UIImageView
.UIImageView
, nic nie pomogło.Załączam kod poniżej, w tym kodzie inicjalizuję zarówno
UIImageView
aUILabel
, jak i , etykieta działa dobrze pod względem zdarzeń odpalania. Próbowałem unikać nieistotnego kodu. Dzięki chłopaki, IlanOraz metoda obsługująca zdarzenie:
Jak powiedziano, odebrano dotknięcie etykiety.
źródło
Zamiast tworzyć dotykalny widok UIImageView, a następnie umieszczać go na pasku nawigacyjnym, należy po prostu utworzyć UIBarButtonItem, który tworzy się z UIImageView.
Najpierw utwórz widok obrazu:
Następnie usuń element z kolcem z widoku obrazu:
Następnie dodaj przycisk paska do paska nawigacji:
Pamiętaj, że ten kod trafia do kontrolera widoku, który znajduje się w tablicy kontrolera widoku kontrolera nawigacji. Zasadniczo więc ten „dotykowy przycisk paska przypominający obraz” pojawi się na pasku nawigacji tylko wtedy, gdy ten kontroler widoku jest wyświetlany. Po naciśnięciu innego kontrolera widoku ten przycisk paska nawigacji zniknie ~
źródło
To, co możesz chcieć zrobić, to przesłonić
touchesBegan:withEvent:
metodęUIView
(lub podklasy), która zawiera TwójUIImageView
widok podrzędny.W ramach tej metody sprawdź, czy którykolwiek z
UITouch
dotknięć znajduje się w granicachUIImageView
instancji (powiedzmy, że jest wywoływanyimageView
).To znaczy, czy
CGPoint
element[touch locationInView]
przecina się zCGRect
elementem[imageView bounds]
? Zajrzyj do funkcji,CGRectContainsPoint
aby uruchomić ten test.źródło
Najpierw umieść przycisk UIButton, a następnie albo możesz dodać obraz tła dla tego przycisku, albo musisz umieścić UIImageView nad przyciskiem.
lub
Możesz dodać gest stuknięcia do UIImageView, aby uzyskać akcję kliknięcia po dotknięciu UIImageView.
źródło
Dla tych z Was, którzy szukają rozwiązania Swift 4 na tę odpowiedź. Możesz użyć następujących, aby wykryć zdarzenie dotyku w UIImageView.
Następnie musisz zdefiniować swój selektor w następujący sposób:
źródło
Dodaj gest do tego widoku. Dodaj obraz do tego widoku, a następnie wykryje gest również na obrazie. Czy możesz spróbować z metodą delegata zdarzenia dotykowego, a następnie w takim przypadku może to również wykrywać. Dzięki
źródło