J'ai donc un problème avec les boutons et les animations. Fondamentalement, j'anime une vue en utilisant les animations UIView tout en essayant d'écouter les taps sur le bouton à l'intérieur de la vue. La vue est aussi grande que le bouton, et la vue est en réalité une sous-classe de UIImageView avec une image sous le bouton. La vue est une sous-vue d'une vue de conteneur placée dans Interface Builder avec l'interaction de l'utilisateur activée et l'écrêtage activé. Toutes les animations et manipulations de boutons sont effectuées dans cette sous-classe UIImageView, tandis que le message startFloating
est envoyé depuis une classe séparée si nécessaire.iPhone UIView Animation désactive UIButton Subview
Si je ne fais pas d'animation, le message buttonTapped:
est envoyé correctement, mais pendant l'animation, il n'est pas envoyé. J'ai également essayé d'implémenter la méthode touchesEnded
, et le même comportement se produit.
UIImageView sous-classe init (j'ai le bouton rempli d'une couleur que je peux voir le cadre se prépare correctement, ce qu'il fait):
- (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éthode
d'animation qui démarre l'animation (si je ne le fais pas appellent cela le bouton fonctionne correctement):
- (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];
}
donc, pour être clair:
- Utilisation de l'animation UIView désactive efficacement le bouton.
- La désactivation de l'animation provoque le fonctionnement du bouton.
- Le bouton est correctement dimensionné et positionné sur l'écran et se déplace correctement avec la vue.
Hmm après avoir fait quelques tests, je ne crois que vous avez raison. Cela semble assez janky cependant, contre les attentes pour l'animation. Quand vous dites "faites l'animation vous-même" vous faites référence à une animation de style NSTimer? Aussi je suppose que la mise en œuvre de la famille des méthodes toucherait le même comportement? – bensnider
Donc oui en utilisant une animation NSTimer je suis capable d'utiliser le bouton de cette manière. Merci. – bensnider
Vous pouvez également faire vous-même le suivi du contact et ne pas compter sur le bouton du tout. Cela nécessiterait encore une animation manuelle, mais pourrait vous donner de meilleurs résultats pour l'interaction. – axiixc