7 Stimmen

iPhone UIView Animation deaktiviert UIButton Unteransicht

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X