objective - swift ios documentation
Evento táctil en UIView (6)
¿Alguien tiene un código de muestra para detectar toques en una UIView creada dinámicamente? He encontrado algunas referencias a touchesBegan pero no entiendo cómo implementarlo ...
Con guesture recongnizer, es mucho más fácil atrapar eventos táctiles.
Encuentra uno invitado de la biblioteca de componentes en el guión gráfico:
Por ejemplo, arrastre Tap Reconocedor de gestos a su vista. No se muestra en la interfaz de usuario de la vista. Puede encontrarlo en el perfil del documento en el panel izquierdo del guión gráfico:
El último paso es vincularlo (mediante el control y arrastrar) a la vista como delegar donde se controla el tacto y arrastrar y arrastrar hacia la clase del controlador de vista como una acción. Aquí está la foto de las conexiones de enlace.
y código de acción:
@IBAction func tapAction(_ sender: Any) {
// touch is captured here.
}
Cree eventos táctiles con UIAnimation en UIView, puede administrar toques en UIView en cualquier lugar.
Código siguiente: aquí self.finalScore es un UIView y cup es un UIImageView. Yo lo hago
El evento táctil en UIImageView, presente dentro de 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;}];
}];
}
Al igual que UITapGestureRecognizer es otra forma de manejar los eventos táctiles en 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];
Cree su propia UIView
personalizada desde una subclase que haya creado al heredar UIView
y anule el siguiente método dentro de la subclase,
(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
}
En lugar de capturar el toque con el gesto, sugeriría cambiar la clase padre de UIView a UIControl, para que pueda manejar el evento touchUpInside
De:
@interface MyView : UIView
A:
@interface MyView : UIControl
y luego agregue esta línea para ver
[self addTarget:self action:@selector(viewTapped:) forControlEvents:UIControlEventTouchUpInside];
Porque el gesto puede crear problemas mientras se desplaza.
Mi método es simplemente cambiar la clase UIView
a UIControl
en InterfaceBuilder IdentityInspector, luego ConnectionsInspector tendrá instantáneamente el evento táctil listo para enganchar.
Cero cambios de código.
Una forma muy general de obtener toques es anular estos métodos en una subclase UIView personalizada:
- (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
Los documentos oficiales para estos métodos se encuentran en Respuesta a los eventos táctiles en los documentos de la clase UIResponder (UIView hereda esos métodos ya que es una subclase de UIResponder). En la Guía de manejo de eventos para iOS se pueden encontrar documentos más extensos y más introductorios.
Si solo desea detectar un toque (touch-down, luego un toque dentro de su vista), es más fácil agregar un UIButton
como una subvista de su vista, y agregar su propio método personalizado como un par objetivo / acción para ese botón . Los botones personalizados son invisibles de forma predeterminada, por lo que no afectaría el aspecto de su vista.
Si está buscando interacciones más avanzadas, también es bueno saber acerca de la clase UIGestureRecognizer
.