berührt Ereignishandler für UIImageView
-
19-09-2019 - |
Frage
Ich bin gerade mit iPhone Entwicklung erklärt bekommen und kann nicht scheinen, um die Antwort zu finden, ich bin auf der Suche für das, was ich tun möchte.
Es scheint, wie ich in der Lage sein sollte programmatisch eine UIImageView zu erstellen und dann einen Event-Handler einrichten für sie Touch-Funktionen sind.
in c # würde ich etwas, das wie
siehtButton b = new Button (); b.Click + = mein Handler-Code
Im Moment habe ich diese
CGRect myImageRect = CGRectMake(0.0f, 0.0f, 141.0f, 151.0f);
UIImageView *myImage = [[UIImageView alloc] initWithFrame:myImageRect];
myImage.userInteractionEnabled = YES;
[myImage setImage:[UIImage imageNamed:@"myImage.png"]];
myImage.opaque = YES; // explicitly opaque for performance
[self.view addSubview:myImage];
[myImage release];
Was muss ich tun, um die Touch-Ereignisse außer Kraft zu setzen?
Dank
Lösung
Es ist zwar nicht die vollständige Antwort auf Ihre Frage ist, ich denke, die folgende Lösung besser sein könnte, die „unsichtbare-Knopf-Umgehung“ dann tun .. Unterklasse einfach von UIImageView und überschreiben Sie die folgende Methode:
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
//your UIImageView has been touched :)
//event -> "A UIEvent object representing the event to which the touches belong."
//touches -> "A set of UITouch instances in the event represented by event that represent the touches in the UITouchPhaseEnded phase."
}
hoffe, das hilft ...
Andere Tipps
Ich habe eine Hauptansicht mit einigen Ikonen wie „über“ einen über Ansicht zu öffnen. In der entsprechenden Steuerung (Hauptansicht) I hinzugefügt einen Ereignishandler für touchesBegan. Außerdem muss ich prüfen, welche Ansicht „berührt“ wurde, da es mehr Symbole in der Ansicht sind. Meine UIImageView Instanz ist „aboutImg“ und Interaktion mit dem Benutzer muss überprüft werden. (D UI Builder -> Attribut Inspektor der Ansicht)
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
if ([touch view] == aboutImg){
[self ShowAbout];
}
}
Stellen Sie sicher, dass Sie die „Benutzer-Interaktionen aktiviert“ überprüfen. Dies ist die einfachste Lösung
Verwenden Sie einfach eine benutzerdefinierte UIButton mit dem Bild als Hintergrundbild.
Ich habe nicht einen Weg, es zu tun direkt mit UIImageView
gefunden. Aber wenn Sie es Unterklasse und die nextResponder
Methode überschreiben, einen Delegierten unter Kontrolle zurückkehren können Sie tun, was Sie wollen. Setzen Sie den Delegierten als eine Eigenschaft der Unterklasse und dann können Sie in einem Delegierten für die Touch-Ereignisse passieren und ändern Sie es jederzeit möglich.
Ich habe andere Antworten vorschlagen gesehen eine unsichtbare Schaltfläche unterhalb der UIImageView setzen, die Bildansicht userInteractionEnabled: NO
, und lassen die Berührungen passieren auf die Taste.
Sie müssen nichts mit UIImageView zu tun, Sie UIButton mit Typ benutzerdefinierte verwenden können und berühren sich im Inneren Aktion, um es ... setzen button.imageview setImage hinzu: i-e:
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(0,0,100,100); //edit for you own frame
UIImage *img = [UIImage imageNamed:@"myimage.png"];
[button setImage:img forState:UIControlStateNormal];
Wenn Sie mit UIImageView gehen wollen, dann müssen Sie Gesten zu Ihrem Imageview hinzuzufügen. Sie können sonst Ihre UIImageView Unterklasse und dann Touch-Ereignisse verwenden.
Der einfachste Weg, ein OnClick-Ereignis zu einem UIImageView oder zu einem UIView hinzuzufügen, ist eine Anzapfung Gestenerkenner, um es hinzuzufügen.
UIImage *myImage = [UIImage imageNamed:@"myImage.png"];
UIImageView *myImageView = [[UIImageView alloc] initWithImage: myImage];
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action: @selector(onImageViewClicked)];
singleTap.numberOfTapsRequired = 1;
singleTap.numberOfTouchesRequired = 1;
[self.myImageView addGestureRecognizer:singleTap];
[self.myImageView setUserInteractionEnabled:YES];