Tengo un problema con los botones y las animaciones. Básicamente, estoy animando una vista usando las animaciones de UIView mientras trato de escuchar los toques en el botón dentro de la vista. La vista es tan grande como el botón, y la vista es en realidad una subclase de UIImageView con una imagen debajo del botón. La vista es una subvista de una vista de contenedor ubicada en el Interface Builder con la interacción del usuario habilitada y la opción de clipping habilitada. Toda la animación y el manejo de los botones se realiza en esta subclase UIImageView, mientras que el mensaje startFloating
se envía desde una clase separada según sea necesario.Animación de iPhone UIView Desactiva la subvista UIButton
Si no hago ninguna animación, el mensaje buttonTapped:
se envía correctamente, pero durante la animación no se envía. También intenté implementar el método touchesEnded
, y ocurre el mismo comportamiento.
UIImageView init subclase (tengo el botón rellenar con un color para que pueda ver el fotograma obtiene configurar correctamente, lo que lo hace):
- (id)initWithImage:(UIImage *)image {
self = [super initWithImage:image];
if (self != nil) {
// ...stuffs
UIButton *tapBtn = [UIButton buttonWithType:UIButtonTypeCustom];
tapBtn.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
[tapBtn addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside];
tapBtn.backgroundColor = [UIColor cyanColor];
[self addSubview:tapBtn];
self.userInteractionEnabled = YES;
}
return self;
}
método
animación que inicia la animación (si no lo hago llaman a esto el botón funcionará correctamente):
- (void)startFloating {
[UIView beginAnimations:@"floating" context:nil];
[UIView setAnimationDelegate:self];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
[UIView setAnimationDuration:10.0f];
self.frame = CGRectMake(self.frame.origin.x, -self.frame.size.height, self.frame.size.width, self.frame.size.height);
[UIView commitAnimations];
}
Por lo tanto, para ser claros:
- el uso de la animación UIView efectivamente desactiva el botón.
- Al desactivar la animación, el botón funciona.
- El botón tiene el tamaño y posición correctos en la pantalla, y se mueve junto con la vista correctamente.
Hmm después de hacer algunas pruebas yo creo que son correctos. Sin embargo, esto parece bastante jodido, en contra de las expectativas de animación. Cuando dices "haz la animación tú mismo", ¿te refieres a una animación de estilo NSTimer? También supongo que la implementación de la familia de métodos toques exhibiría el mismo comportamiento? – bensnider
Así que sí, usando una animación NSTimer puedo usar el botón de esta manera. Gracias. – bensnider
También podría hacer el seguimiento táctil usted mismo y no depender en absoluto del botón. Todavía requeriría alguna animación manual, pero puede brindarle mejores resultados para la interacción. – axiixc