Ich habe also ein Problem mit Schaltflächen und Animationen. Grundsätzlich animiere ich eine Ansicht mit den UIView-Animationen, während auch versucht, für taps auf die Schaltfläche innerhalb der Ansicht zu hören. Die Ansicht ist genau so groß wie die Schaltfläche, und die Ansicht ist eigentlich eine Unterklasse von UIImageView mit einem Bild unter der Schaltfläche. Die Ansicht ist eine Unteransicht einer Containeransicht, die im Interface Builder mit aktivierter Benutzerinteraktion und aktiviertem Clipping platziert wurde. Die gesamte Animation und Schaltflächenbehandlung wird in dieser UIImageView-Unterklasse durchgeführt, während die startFloating
Nachricht wird je nach Bedarf von einer separaten Klasse gesendet.
Wenn ich keine Animation mache, wird die buttonTapped:
Nachricht wird korrekt gesendet, aber während der Animation wird sie nicht gesendet. Ich habe auch versucht, die Implementierung der touchesEnded
Methode, und das gleiche Verhalten tritt auf.
UIImageView Unterklasse init (ich habe die Schaltfläche mit einer Farbe gefüllt, so dass ich sehen kann, der Rahmen wird richtig eingestellt, die es tut):
- (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;
}
Animationsmethode, die die Animation startet (wenn ich diese nicht aufrufe, funktioniert die Schaltfläche korrekt):
- (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];
}
Um das klarzustellen:
- Durch die Verwendung der UIView-Animation wird die Schaltfläche effektiv deaktiviert.
- Wenn Sie die Animation deaktivieren, funktioniert die Schaltfläche.
- Die Schaltfläche hat die richtige Größe und Position auf dem Bildschirm und bewegt sich korrekt mit der Ansicht mit.