Ho posizionato un'immagine (UIImageView) sulla barra di navigazione. Ora voglio rilevare l'evento touch e voglio gestire l'evento. Potresti farmi sapere come posso farlo?Come posso rilevare l'evento di tocco di UIImageView
Grazie.
Ho posizionato un'immagine (UIImageView) sulla barra di navigazione. Ora voglio rilevare l'evento touch e voglio gestire l'evento. Potresti farmi sapere come posso farlo?Come posso rilevare l'evento di tocco di UIImageView
Grazie.
È possibile ignorare il metodo touchesBegan:withEvent:
della UIView
(o sottoclasse) che contiene la sottoview UIImageView
.
All'interno di questo metodo, verificare se uno qualsiasi dei tocchi UITouch
rientra nei limiti dell'istanza UIImageView
(diciamo che si chiama imageView
).
Cioè, fa l'elemento CGPoint
[touch locationInView]
si intersecano con la CGRect
elemento [imageView bounds]
? Esaminare la funzione CGRectContainsPoint
per eseguire questo test.
Grazie per la risposta. Ho aggiunto la vista in questo modo: [navBar addSubview: self.pImage]; // aggiunto come sottoview della barra di navigazione. Ho annullato la funzione ma la funzione non viene mai chiamata. Tuttavia, ho impostato la proprietà userInteractionEnabled di UIImageView su YES. Mi sto perdendo qualcosa? – ebaccount
Scopri i tocchi Began: withEvent: method. Ci sono molti esempi sui motori di ricerca di come funziona. –
A UIImageView
è derivato da un UIView
che è derivato da UIResponder
quindi è pronto per gestire gli eventi di tocco. Ti consigliamo di fornire i metodi touchesBegan
, touchesMoved
e touchesEnded
e verranno chiamati se l'utente tocca l'immagine. Se tutto ciò che si desidera è un evento di tocco, è più semplice utilizzare un pulsante personalizzato con l'immagine impostata come immagine del pulsante. Ma se vuoi un controllo più fine sui rubinetti, le mosse, ecc. Questa è la strada da percorrere.
Si potrà anche guardare un paio di cose:
Override canBecomeFirstResponder
e tornare Sì per indicare che la vista può diventare il centro di eventi di tocco (il valore predefinito è NO).
Impostare la proprietà userInteractionEnabled
su SÌ. L'impostazione predefinita per UIViews
è SÌ, ma per UIImageViews
è NO, quindi è necessario accenderlo in modo esplicito.
Se si desidera rispondere a eventi multi-touch (ad esempio pizzico, zoom, ecc.), È necessario impostare multipleTouchEnabled
su SÌ.
Ci ho provato, ma mai meno non ricevo i tocchi Eventi Began ... perché? – Markus
@Markus: ho avuto lo stesso problema, ma l'ho risolto impostando 'userInteractionEnabled' su SÌ sulla mia vista genitore. Vedi http://stackoverflow.com/questions/5887305/uiview-user-interaction-enabled-false-on-parent-but-true-on-child –
In termini pratici, non farlo.
Aggiungi invece un pulsante con stile personalizzato (senza grafica a pulsanti se non specifichi le immagini) su UIImageView. Quindi allegare tutti i metodi che si desidera chiamare a quello.
È possibile utilizzare questa tecnica in molti casi in cui si desidera realmente che un'area dello schermo funga da pulsante anziché interagire con il materiale Touch.
Ho aggiunto un pulsante nella barra di navigazione e posso anche gestire il tocco eventi. Tuttavia, voglio aggiungere un'immagine rotonda su questo pulsante. Potresti farmi sapere come posso farlo a livello di programmazione? Inoltre, potresti farmi sapere come posso impostare la proprietà del pulsante su "personalizzato" a livello di programmazione? – ebaccount
Guarda i documenti per UIButton - devi impostare le immagini di sfondo per uno stato di controllo, ti serviranno immagini diverse per Normale vs. Selezionato/Evidenziato. Lo stile del pulsante è quello che hai impostato su UIButtonStyleCustom, credo - ancora una volta, guarda i documenti per la proprietà dello stile su UIButton. –
Non si aggiunge un UIButton sopra UIImageView un po 'esagerato? Stai aggiungendo un oggetto extra, mentre potresti semplicemente implementare i metodi touches dell'oggetto UIImageView già esistente. No? – samvermette
Invece di creare un UIImageView tangibile quindi posizionarlo nella barra di navigazione, è sufficiente creare un UIBarButtonItem, che si crea da UIImageView.
Per prima cosa la visualizzazione dell'immagine:
UIImageView *yourImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"nameOfYourImage.png"]];
poi fare la voce barbutton dalla vostra vista dell'immagine:
UIBarButtonItem *yourBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:yourImageView];
Poi aggiungere l'elemento pulsante della barra per la barra di navigazione:
self.navigationItem.rightBarButtonItem = yourBarButtonItem;
Ricorda che questo codice va nel controller della vista che si trova all'interno di un controller di navigazione viewcontrolle r array. Quindi, in pratica, questa "voce pulsante della barra immagine che può essere toccata" apparirà solo nella barra di navigazione quando questo controller di visualizzazione viene visualizzato. Quando si preme un altro controller della vista, questa voce del pulsante della barra di navigazione scompare ~
È inoltre possibile aggiungere un UIGestureRecognizer. Esso non richiede di aggiungere un ulteriore elemento nella gerarchia vista, ma fornisce ancora si tutto il codice ben scritto per la gestione di eventi di tocco con un abbastanza semplice interfaccia:
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];
NON dimenticare di impostare UserInteractionEnabled per imgView_ –
Questo è un approccio molto pulito. Mi ha permesso di aggiungere un gestore di tap senza modifiche al mio (già complicato) Visualizza setup e gestione. Vedi "Altro ..." in https://developer.apple.com/library/ios/documentation/UIKit/reference/UITapGestureRecognizer_Class/index.html per un gestore di scheletri semplice. – Brandyn
Sono stato in diversi thread su le ultime ore cercando di trovare una soluzione per il mio problema, senza risultato. Vedo che molti sviluppatori condividono questo problema e penso che le persone qui sappiano questo. Ho più immagini all'interno di un UIScrollView
, cercando di ottenere gli eventi tap su di loro.
non riceve alcun evento da un UIImangeView
, ma ottengo un evento da un valore simile UILable
con parametri molto simili che ho impostato su di esso. sotto IOS 5.1.
ho già fatto quanto segue:
UIImageView
.UIImageView
, non ha aiutato nessuno.Collegamento po 'di codice di seguito, in questo codice che inizializzare sia un UIImageView
e UILabel
, l'etichetta funziona bene in termini di sparare eventi. Ho provato a mantenere 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 rubinetto etichetta viene ricevuto.
Aggiungi un gesto su quella immagine view.add in quella vista, quindi potrebbe rilevare il gesto sull'immagine. Potresti provare con il metodo delegato di evento touch, in quel caso potrebbe anche essere rilevato. Grazie
Per aggiungere un evento di tocco a un UIImageView utilizzare il seguente nella vostra .m
UITapGestureRecognizer *newTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myTapMethod)];
[myImageView setUserInteractionEnabled:YES];
[myImageView addGestureRecognizer:newTap];
-(void)myTapMethod{
// treat image tap
}
speranza che aiuta.
Questo è un modo estremamente semplice e pulito per rendere cliccabile una vista dell'immagine. Dovrebbe essere la risposta migliore. Grazie! – Jason
felice che tu l'abbia trovato utile. felice codifica! –
userInteractionEnabled = true è la parte che è facile da dimenticare, grazie. –
Per prima cosa è necessario posizionare un UIButton, quindi è possibile aggiungere un'immagine di sfondo per questo pulsante o è necessario posizionare UIImageView sul pulsante.
In questa situazione vorrei (e penso che dovresti) utilizzare un UIButton personalizzato. – titaniumdecoy
Verifica ** Versione Swift Risposta ** [http://stackoverflow.com/a/41328885/3177007](http://stackoverflow.com/a/41328885/3177007) –