Mam plik UIImageView
, który chcę zmienić rozmiar i obracać itp.
Czy UIGestureRecognizer
można dodać do UIImageView
?
Chciałbym dodać moduł rozpoznawania rotacji i szczypania, UIImageView
który zostanie utworzony w czasie wykonywania.
Jak dodać te urządzenia rozpoznające?
userInteractionEnabled
nadal musi być ustawiony na TAK / prawda w Xcode 8 Objective-C / SwiftTak, do UIImageView można dodać UIGestureRecognizer. Jak stwierdzono w drugiej odpowiedzi, bardzo ważne jest, aby pamiętać, aby umożliwić interakcję użytkownika w widoku obrazu poprzez ustawienie jego
userInteractionEnabled
właściwości naYES
. UIImageView dziedziczy z UIView, którego właściwość interakcji użytkownika jest ustawionaYES
domyślnie, jednak właściwość interakcji użytkownika UIImageView jest ustawionaNO
domyślnie.Z dokumentów UIImageView:
Tak czy inaczej, większość odpowiedzi. Oto przykład, jak utworzyć za
UIImageView
pomocą aUIPinchGestureRecognizer
, aUIRotationGestureRecognizer
i aUIPanGestureRecognizer
.Po pierwsze,
viewDidLoad
lub inną wybraną metodą, utwórz widok obrazu, nadaj mu obraz, ramkę i włącz interakcję użytkownika. Następnie utwórz trzy gesty w następujący sposób. Pamiętaj, aby użyć ich właściwości delegowanej (najprawdopodobniej ustawionej na self). Będzie to konieczne, aby używać wielu gestów jednocześnie.Oto trzy metody, które zostaną wywołane po wykryciu gestów w twoim widoku. Wewnątrz sprawdzimy aktualny stan gestu, a jeśli jest on w rozpoczęciu lub zmianie
UIGestureRecognizerState
, odczytamy właściwość skali / obrotu / tłumaczenia gestu, zastosujemy te dane do transformacji afinicznej, zastosujemy transformację afiniczną do obrazu widok, a następnie zresetuj skalę / obrót / tłumaczenie gestów.Wreszcie, co bardzo ważne, musisz użyć metody UIGestureRecognizerDelegate ,
gestureRecognizer: shouldRecognizeSimultaneouslyWithGestureRecognizer
aby umożliwić jednoczesne działanie gestów. Jeśli te trzy gesty są jedynymi trzema gestami, którym przypisano tę klasę jako delegata, możesz po prostu powrócić,YES
jak pokazano poniżej. Jeśli jednak masz dodatkowe gesty, do których przypisano tę klasę jako ich delegata, może być konieczne dodanie logiki do tej metody, aby określić, który gest jest, przed umożliwieniem im wszystkim współpracy.Nie zapomnij upewnić się, że twoja klasa jest zgodna z protokołem UIGestureRecognizerDelegate . Aby to zrobić, upewnij się, że interfejs wygląda mniej więcej tak:
Jeśli wolisz sam bawić się kodem w działającym przykładowym projekcie, przykładowy projekt, który utworzyłem, zawierający ten kod, można znaleźć tutaj.
źródło
Szybki 4.2
a po stuknięciu:
źródło
Rozwiązanie Swift 2.0
W tej samej posiadłości tworzysz rozpoznawanie gestów dotykania, szczypania lub przeciągania. Poniżej przeprowadzę cię przez 4 kroki, aby uruchomić program rozpoznający.
4 kroki
1.) Dziedzicz
UIGestureRecognizerDelegate
po dodaniu go do podpisu klasy.2.) Kontroluj przeciąganie z obrazu do viewController, aby utworzyć IBOutlet:
3.) W swoim viewDidLoad dodaj następujący kod:
4.) Utwórz funkcję, która zostanie wywołana po stuknięciu rozpoznawania gestów. (Możesz wykluczyć,
= nil
jeśli wybierzesz).Twój końcowy kod powinien wyglądać mniej więcej tak:
źródło
Właśnie to zrobiłem z swift4, dodając 3 gesty razem w jednym widoku
Oto mój przykładowy kod
Wszelkie pytania, po prostu wpisz komentarz. Dziękuję Ci
źródło
Przykład SWIFT 3
W razie potrzeby nie można delegować narzędzia do rozpoznawania gestów ani innych implementacji.
źródło
Możesz także przeciągnąć rozpoznawanie gestów dotknij do widoku obrazu w
Storyboard
. Następnie utwórz akcję wedługctrl + drag
kodu.źródło
Dla miłośnika bloków możesz użyć ALActionBlocks, aby dodać akcję gestów w bloku
źródło