Ich habe ein Bild (UIImageView) in der Navigationsleiste platziert. Jetzt möchte ich das Berührungsereignis erkennen und das Ereignis behandeln. Könnten Sie mich wissen lassen, wie ich das machen kann?
Vielen Dank.
ios
iphone
uiimageview
uitouch
ebaccount
quelle
quelle
Antworten:
In der Praxis tun Sie das nicht.
Fügen Sie stattdessen eine Schaltfläche mit benutzerdefiniertem Stil (keine Schaltflächengrafiken, es sei denn, Sie geben Bilder an) über UIImageView hinzu. Fügen Sie dann die gewünschten Methoden hinzu.
Sie können diese Technik in vielen Fällen verwenden, in denen Sie wirklich möchten, dass ein Bereich des Bildschirms als Schaltfläche fungiert, anstatt mit dem Touch-Material herumzuspielen.
quelle
A
UIImageView
wird von a abgeleitet, vonUIView
dem abgeleitet wird,UIResponder
damit es Berührungsereignisse verarbeiten kann. Hier finden Sie die zur Verfügung stellen möchtentouchesBegan
,touchesMoved
undtouchesEnded
Methoden und diese aufgerufen werden , wenn der Benutzer das Bild tippt. Wenn Sie nur ein Tap-Ereignis wünschen, ist es einfacher, einfach eine benutzerdefinierte Schaltfläche zu verwenden, bei der das Bild als Schaltflächenbild festgelegt ist. Wenn Sie jedoch eine feinere Kontrolle über Wasserhähne, Bewegungen usw. wünschen, ist dies der richtige Weg.Sie sollten sich noch ein paar Dinge ansehen:
Überschreiben Sie
canBecomeFirstResponder
und geben Sie JA zurück, um anzuzeigen, dass die Ansicht im Mittelpunkt von Berührungsereignissen stehen kann (die Standardeinstellung ist NEIN).Setzen Sie die
userInteractionEnabled
Eigenschaft auf YES. Der Standardwert fürUIViews
ist JA, aber fürUIImageViews
ist NEIN, daher müssen Sie ihn explizit aktivieren .Wenn Sie auf Multitouch-Ereignisse (z. B. Prise, Zoom usw.) reagieren möchten, sollten Sie
multipleTouchEnabled
auf JA setzen.quelle
userInteractionEnabled
ich in meiner übergeordneten Ansicht auf JA gesetzt habe. Siehe stackoverflow.com/questions/5887305/…Um einem UIImageView ein Touch-Ereignis hinzuzufügen, verwenden Sie Folgendes in Ihrer .m
hoffentlich hilft das.
quelle
Sie können auch einen UIGestureRecognizer hinzufügen. Es ist nicht erforderlich, dass Sie ein zusätzliches Element in Ihre Ansichtshierarchie einfügen, bietet Ihnen jedoch den gesamten gut geschriebenen Code für die Behandlung von Berührungsereignissen mit einer relativ einfachen Oberfläche:
quelle
Ich war in den letzten Stunden in verschiedenen Threads und habe erfolglos versucht, eine Lösung für mein Problem zu finden. Ich sehe, dass viele Entwickler dieses Problem teilen, und ich denke, die Leute hier wissen davon. Ich habe mehrere Bilder in einem
UIScrollView
und versuche, Tap-Ereignisse darauf abzurufen.UIImangeView
Ich bekomme keine Ereignisse von einem , aber ich bekomme ein Ereignis von einem ähnlichenUILable
mit sehr ähnlichen Parametern, die ich darauf einstelle. unter IOS 5.1.Ich habe bereits folgendes getan:
UIImageView
.UIImageView
, hat keiner geholfen.Wenn ich unten einen Code anhänge, initialisiere ich in diesem Code sowohl a
UIImageView
als auchUILabel
, und die Beschriftung funktioniert in Bezug auf Auslöseereignisse einwandfrei. Ich habe versucht, irrelevanten Code fernzuhalten. Danke Jungs, IlanUnd die Methode, die das Ereignis behandelt:
Wie gesagt, der Etikettentipp wird empfangen.
quelle
Anstatt eine berührbare UIImageView zu erstellen und sie dann in der Navigationsleiste zu platzieren, sollten Sie einfach ein UIBarButtonItem erstellen, das Sie aus einer UIImageView erstellen.
Machen Sie zuerst die Bildansicht:
Machen Sie dann das Barbutton-Element aus Ihrer Bildansicht:
Fügen Sie dann das Element der Balkentaste zu Ihrer Navigationsleiste hinzu:
Denken Sie daran, dass dieser Code in den View Controller eingeht, der sich in einem Viewcontroller-Array des Navigationscontrollers befindet. Im Grunde genommen wird dieses "berührbare Bildschaltflächen-Schaltflächenelement" nur in der Navigationsleiste angezeigt, wenn dieser Ansichts-Controller angezeigt wird. Wenn Sie einen anderen Ansichts-Controller drücken, verschwindet diese Schaltfläche in der Navigationsleiste ~
quelle
Möglicherweise möchten Sie die
touchesBegan:withEvent:
Methode derUIView
(oder Unterklasse) überschreiben , die IhreUIImageView
Unteransicht enthält .Testen Sie bei dieser Methode, ob eine der
UITouch
Berührungen innerhalb der Grenzen derUIImageView
Instanz liegt (sagen wir, sie wird aufgerufenimageView
).Das heißt, schneidet sich das
CGPoint
Element[touch locationInView]
mit demCGRect
Element[imageView bounds]
? Schauen Sie sich die FunktionCGRectContainsPoint
an, um diesen Test auszuführen.quelle
Zuerst sollten Sie einen UIButton platzieren, dann können Sie entweder ein Hintergrundbild für diese Schaltfläche hinzufügen oder Sie müssen eine UIImageView über der Schaltfläche platzieren.
oder
Sie können die Tippgeste zu einer UIImageView hinzufügen, damit die Klickaktion beim Tippen auf die UIImageView angezeigt wird.
quelle
Für diejenigen unter Ihnen, die nach einer Swift 4-Lösung für diese Antwort suchen. Sie können Folgendes verwenden, um ein Berührungsereignis in einer UIImageView zu erkennen.
Sie müssen dann Ihren Selektor wie folgt definieren:
quelle
Fügen Sie dieser Ansicht eine Geste für dieses view.add-Bild hinzu, dann wird auch eine Geste für das Bild erkannt. Könnten Sie es mit der delegierten Methode des Berührungsereignisses versuchen, wird sie in diesem Fall möglicherweise auch erkannt. Vielen Dank
quelle