Domanda

sto ottenendo appena affermato con lo sviluppo iPhone e non riesco a trovare la risposta che sto cercando per quello che voglio fare.

Sembra come dovrei essere in grado di creare a livello di codice un UIImageView e quindi impostare un gestore di eventi per le sue funzioni touch.

in C # avrei qualcosa che assomiglia

Pulsante b = new Button (); b.Click + = il mio codice del gestore

adesso ho questo

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];

Che cosa devo fare per ignorare gli eventi di tocco?

grazie

È stato utile?

Soluzione

Anche se non è la risposta completa alla tua domanda, penso che la seguente soluzione potrebbe essere meglio allora fare il "invisibile-button-soluzione" .. semplicemente sottoclasse da UIImageView e l'override del metodo seguente:

-(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."

}

Spero che questo aiuti ...

Altri suggerimenti

Ho un MAINVIEW con alcune icone come "circa" per aprire un su vista. Nel regolatore corrispondente (MAINVIEW) ho aggiunto un gestore eventi per touchesBegan. Inoltre ho bisogno di controllare quale vista è stato "toccato", in quanto vi sono più icone nella vista. Il mio esempio è UIImageView "aboutImg" e interazione con l'utente deve essere controllato. (Cioè costruttore di UI -> Attributi di vista)

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    if ([touch view] == aboutImg){
        [self ShowAbout];
    }
}

Assicurati di controllare le "interazioni utente abilitato". Questa è la soluzione più semplice

Basta usare un personalizzato UIButton con l'immagine come immagine di sfondo.

Non ho trovato un modo per farlo direttamente con UIImageView. Ma se si sottoclasse e l'override del metodo nextResponder per restituire un delegato sotto il vostro controllo si può fare quello che stai cercando. Esporre il delegato come una proprietà della sottoclasse e quindi si può passare un delegato per il tocco eventi e cambiare in qualsiasi momento.

Ho visto altre risposte suggeriscono di mettere un pulsante invisibile sotto l'UIImageView, impostando la visualizzazione dell'immagine per userInteractionEnabled: NO, e lasciando che i tocchi passano al pulsante.

È necessario nulla a che fare con UIImageView, è possibile utilizzare UIButton con tipo personalizzato e aggiungere ritocchi azione dentro ad esso ... impostare setImage button.imageview: 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];

Se si vuole andare con UIImageView, allora avete bisogno di aggiungere gesti per il vostro ImageView. il resto si può sottoclasse tuo UIImageView e quindi utilizzare eventi di tocco.

Il modo più semplice per aggiungere un evento onclick a un UIImageView o ad un'UIView è quello di aggiungere un sistema di riconoscimento del rubinetto gesto ad esso.

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];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top