Qualcuno ha un codice di esempio per rilevare tocchi su un UIView creato dinamicamente? Ho trovato alcuni riferimenti a touchesBegan ma non riesco a capire come implementarlo ...Tocca evento su UIView
risposta
un modo molto generale per arrivare tocchi è quello di ignorare questi metodi in una sottoclasse UIView personalizzato:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
la documentazione ufficiale per questi metodi è sotto Rispondendo a toccare Ev ents in the UIResponder class docs (UIView eredita questi metodi poiché è una sottoclasse di UIResponder). Documenti più lunghi e più introduttivi possono essere trovati nel Event Handling Guide for iOS.
Se si desidera rilevare un tocco (touchdown, quindi ritocco all'interno della visualizzazione), è più semplice aggiungere uno UIButton
come visualizzazione secondaria della vista e aggiungere il proprio metodo personalizzato come target/azione coppia per quel pulsante. I pulsanti personalizzati sono invisibili per impostazione predefinita, pertanto non influiscono sull'aspetto della visualizzazione.
Se stai cercando interazioni più avanzate, è anche utile sapere su the UIGestureRecognizer
class.
Crea il tuo personalizzato UIView
da una sottoclasse creato ereditando UIView
e sovrascrivere il metodo seguente all'interno della sottoclasse,
(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
}
Crea un evento touch con UIAnimation su UIView, puoi gestire i tocchi su UIView ovunque.
Codice seguente: qui self.finalScore è un UIView e cup è un UIImageView. Gestisco
l'evento di tocco su UIImageView, presente all'interno di UIView.
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch1 = [touches anyObject];
CGPoint touchLocation = [touch1 locationInView:self.finalScore];
CGRect startRect = [[[cup layer] presentationLayer] frame];
CGRectContainsPoint(startRect, touchLocation);
[UIView animateWithDuration:0.7
delay:0.0
options:UIViewAnimationCurveEaseOut
animations:^{cup.transform = CGAffineTransformMakeScale(1.25, 0.75);}
completion:^(BOOL finished) {
[UIView animateWithDuration:2.0
delay:2.0
options:0
animations:^{cup.alpha = 0.0;}
completion:^(BOOL finished) {
[cup removeFromSuperview];
cup = nil;}];
}];
}
Come UITapGestureRecognizer è un altro modo di gestire gli eventi touch su UIView ....
UITapGestureRecognizer *touchOnView = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(releaseButAction)] autorelease];
// Set required taps and number of touches
[touchOnView setNumberOfTapsRequired:1];
[touchOnView setNumberOfTouchesRequired:1];
// Add the gesture to the view
[[self view] addGestureRecognizer:touchOnView];
Invece di catturare tocco usando gesto, vorrei suggerire di cambiare UIView classe genitore per UIControl, in modo che si può gestire l'evento touchUpInside
Da:
@interface MyView : UIView
A:
@interface MyView : UIControl
e quindi aggiungere questa linea per vista-
[self addTarget:self action:@selector(viewTapped:) forControlEvents:UIControlEventTouchUpInside];
perché il gesto può creare problemi durante lo scorrimento.
Il mio metodo è semplicemente cambiare la classe UIView
in UIControl
in IdentBuilder IdentityInspector, quindi ConnectionsInspector avrà immediatamente l'evento tattile pronto per l'hook.
modifiche del codice zero.
Con guest ricognnizer, è molto facile catturare gli eventi touch.
trovare uno guested dalla libreria di componenti in storyboard:
Ad esempio, trascinare Tap Gesture Recognizer alla vista. Non è mostrato nell'interfaccia utente della vista. Potete trovare da contorno documento nel pannello di sinistra in Storyboard:
Il passo finale è quello di collegarlo (tramite controllo-trascinamento) per la vista come delegato in cui viene monitorata tocco, e il controllo trascinare alla tua classe di controller di visualizzazione come un'azione. Ecco l'immagine delle connessioni di collegamento.
e codice di azione:
@IBAction func tapAction(_ sender: Any) {
// touch is captured here.
}
- 1. tocca gesto non riconosciuto su uiimageview
- 2. Swift, evento di tocco UIView nel controller
- 3. Angoli arrotondati su UIView
- 4. Maschera sfumatura su UIView
- 5. Come passare un evento tattile da un UIView agli UIView (s) sotto di esso?
- 6. Rileva tap su "spazio vuoto" di UIView
- 7. Rimuovi la vista quando si tocca all'esterno
- 8. Due UITapGestureRecognizer in su UIView
- 9. Più UITableViews su un UIView
- 10. tocco UIView iPhoneMoved: withEvent: non viene chiamato su UIView con i riconoscimenti di gesture
- 11. Tocca e tira giù una vista
- 12. Supporto/IE10 Tocca Eventi?
- 13. Monkeyrunner non tocca la webview
- 14. Controllare se UIView viene toccato?
- 15. UITapGestureRecognizer tocca su self.view ma ignora le sottoview
- 16. Aggiungi indicatore su Google Maps Android tramite touch o tocca
- 17. evento onchange su window.location.href
- 18. Meteor.js su evento login
- 19. keycode su evento keydown
- 20. Gestione di evento tocco UITextView quando si tocca una parola in esso
- 21. Objective-C: controllare se la vista tocca un'altra vista
- 22. UIView
- 23. Rileva utente tocca notifica locale
- 24. UIscrollView DidScroll - solo quando tocca
- 25. iOS trascina su UIView, effetto tela
- 26. Animazione UIView basata su velocità UIPanGestureRecognizer
- 27. sfocata UIView con CATransform3D solo su RETINA
- 28. Maschera Swift del livello cerchio su UIView
- 29. iPhone: Scala UIView su un punto specifico
- 30. GPUImmagine video con trasparenza su UIView
il secondo codice snipped mi ha aiutato, ma meglio la pratica sarebbe 'UITapGestureRecognizer * touchOnView = [[[UITapGestureRecognizer alloc] initWithTarget: azione di auto: @selector (releaseButAction :)] autorelease]; 'e il metodo sarebbe quindi' - (void) releaseButAction: (UIGestureRecognizer *) gestureRecognizer' .. solo fyi! – sixstatesaway