Ho posizionato un'immagine (UIImageView) sulla barra di navigazione. Ora voglio rilevare l'evento tocco e voglio gestire l'evento. Potresti farmi sapere come posso farlo?
Grazie.
Ho posizionato un'immagine (UIImageView) sulla barra di navigazione. Ora voglio rilevare l'evento tocco e voglio gestire l'evento. Potresti farmi sapere come posso farlo?
Grazie.
Risposte:
In termini pratici, non farlo.
Aggiungere invece un pulsante con uno stile personalizzato (nessuna grafica del pulsante a meno che non si specifichino immagini) su UIImageView. Quindi collega tutti i metodi che vuoi chiamare a quello.
Puoi usare questa tecnica per molti casi in cui vuoi davvero che alcune aree dello schermo agiscano come un pulsante invece di scherzare con le cose Touch.
A UIImageView
è derivato da a da UIView
cui è derivato, UIResponder
quindi è pronto per gestire gli eventi di tocco. Ti consigliamo di fornire touchesBegan
, touchesMoved
etouchesEnded
metodi e vengano richiamate se l'utente tocca l'immagine. Se tutto ciò che desideri è un evento tocco, è più semplice utilizzare un pulsante personalizzato con l'immagine impostata come immagine del pulsante. Ma se vuoi un controllo più preciso su rubinetti, movimenti, ecc., Questa è la strada da percorrere.
Ti consigliamo anche di esaminare alcune altre cose:
Sostituisci canBecomeFirstResponder
e restituisci YES per indicare che la vista può diventare il fulcro degli eventi di tocco (l'impostazione predefinita è NO).
Imposta la userInteractionEnabled
proprietà su YES. L'impostazione predefinita per UIViews
è SÌ, ma per UIImageViews
NO, quindi è necessario attivarlo esplicitamente.
Se vuoi rispondere a eventi multi-touch (ad es. Pizzicare, zoomare, ecc.), Ti consigliamo di impostare multipleTouchEnabled
su SÌ.
userInteractionEnabled
SÌ nella vista genitore. Vedi stackoverflow.com/questions/5887305/…
Per aggiungere un evento tocco a un UIImageView, utilizza quanto segue nel tuo .m
UITapGestureRecognizer *newTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myTapMethod)];
[myImageView setUserInteractionEnabled:YES];
[myImageView addGestureRecognizer:newTap];
-(void)myTapMethod{
// treat image tap
}
spero che aiuti.
Puoi anche aggiungere un UIGestureRecognizer. Non richiede l'aggiunta di un elemento aggiuntivo nella gerarchia di visualizzazione, ma fornisce comunque tutto il codice ben scritto per la gestione degli eventi di tocco con un'interfaccia abbastanza semplice:
UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc]
initWithTarget:self action:@selector(handleSwipe:)];
swipeRight.direction = UISwipeGestureRecognizerDirectionRight;
[imgView_ addGestureRecognizer:swipeRight];
[swipeRight release];
UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc]
initWithTarget:self action:@selector(handleSwipe:)];
swipeLeft.direction = UISwipeGestureRecognizerDirectionLeft;
[imgView_ addGestureRecognizer:swipeLeft];
[swipeLeft release];
Sono stato su diversi thread nelle ultime ore cercando di trovare una soluzione per il mio problema, senza alcun risultato. Vedo che molti sviluppatori condividono questo problema e penso che le persone qui lo sappiano. Ho più immagini all'interno di un fileUIScrollView
, cercando di ottenere eventi di tocco su di esse.
non UIImangeView
ricevo alcun evento da un , ma ottengo un evento da un simile UILable
con parametri molto simili che sto impostando. sotto IOS 5.1.
Ho già fatto quanto segue:
UIImageView
.UIImageView
, ma non ha aiutato nessuno.Allegando del codice di seguito, in questo codice inizializzo sia a UIImageView
che UILabel
, l'etichetta funziona bene in termini di eventi di accensione. Ho provato a tenere fuori il codice irrilevante. Grazie ragazzi, Ilan
UIImageView *single_view = [[UIImageView alloc]initWithFrame:CGRectMake(200, 200, 100, 100)];
single_view.image=img;
single_view.layer.zPosition=4;
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapGestureCaptured:)];
[single_view addGestureRecognizer:singleTap];
[single_view setMultipleTouchEnabled:YES];
[single_view setUserInteractionEnabled:YES];
[self.myScrollView addSubview:single_view];
self.myScrollView.userInteractionEnabled=YES;
UILabel *testLabel = [[UILabel alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
testLabel.backgroundColor=[UIColor redColor];
[self.myScrollView addSubview:testLabel];
[testLabel addGestureRecognizer:singleTap];
[testLabel setMultipleTouchEnabled:YES];
[testLabel setUserInteractionEnabled:YES];
testLabel.layer.zPosition=4;
E il metodo che gestisce l'evento:
- (void)singleTapGestureCaptured:(UITapGestureRecognizer *)gesture
{
UIView *tappedView = [gesture.view hitTest:[gesture locationInView:gesture.view] withEvent:nil];
NSLog(@"Touch event on view: %@",[tappedView class]);
}
Come detto, il tocco dell'etichetta viene ricevuto.
Invece di creare un UIImageView toccabile e quindi posizionarlo sulla barra di navigazione, dovresti semplicemente creare un UIBarButtonItem, che fai da un UIImageView.
Per prima cosa crea la visualizzazione dell'immagine:
UIImageView *yourImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"nameOfYourImage.png"]];
Quindi crea l'elemento Barbutton fuori dalla visualizzazione dell'immagine:
UIBarButtonItem *yourBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:yourImageView];
Quindi aggiungi l'elemento del pulsante della barra alla barra di navigazione:
self.navigationItem.rightBarButtonItem = yourBarButtonItem;
Ricorda che questo codice va nel controller di visualizzazione che si trova all'interno di un array di controller di visualizzazione del controller di navigazione. Quindi, fondamentalmente, questo "elemento pulsante della barra dall'aspetto immagine toccabile" apparirà solo nella barra di navigazione quando viene mostrato questo controller di visualizzazione. Quando si preme un altro controller di visualizzazione, l'elemento del pulsante della barra di navigazione scompare ~
Quello che potresti voler fare è sovrascrivere il touchesBegan:withEvent:
metodo della UIView
(o sottoclasse) che contiene il tuoUIImageView
sottoview.
All'interno di questo metodo, verifica se qualcuno dei UITouch
tocchi rientra nei limiti delUIImageView
dell'istanza (diciamo che è chiamato imageView
).
Cioè, l' CGPoint
elemento si [touch locationInView]
interseca con l' CGRect
elemento [imageView bounds]
? Guarda nella funzione CGRectContainsPoint
per eseguire questo test.
Per prima cosa dovresti posizionare un pulsante UIB, quindi puoi aggiungere un'immagine di sfondo per questo pulsante o devi posizionare un UIImageView sul pulsante.
o
È possibile aggiungere il gesto del tocco a un UIImageView in modo da ottenere l'azione del clic quando si tocca UIImageView.
Per quelli di voi che cercano una soluzione Swift 4 a questa risposta. È possibile utilizzare quanto segue per rilevare un evento di tocco su un UIImageView.
let gestureRecognizer: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(imageViewTapped))
imageView.addGestureRecognizer(gestureRecognizer)
imageView.isUserInteractionEnabled = true
Dovrai quindi definire il tuo selettore come segue:
@objc func imageViewTapped() {
// Image has been tapped
}
Aggiungi il gesto su quella vista.aggiungi l'immagine in quella vista, quindi rileverà anche il gesto sull'immagine. Potresti provare con il metodo delegato dell'evento tocco, quindi anche in quel caso potrebbe essere rilevato. Grazie