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

sieht

Button 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

War es hilfreich?

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];
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top