Unterschied zwischen [UIView beginAnimations:Kontext:] und [UIView animateWithDuration:Animationen:]

Scheint es für mich diese zwei-Klassen-Methoden sind nicht austauschbar. Ich habe eine Untersicht von UIView mit dem folgenden code in die touchesBegan Methode:

if (!highlightView) {
    UIImageView *tempImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Highlight"]];
    self.highlightView = tempImageView;
    [tempImageView release];

    [self addSubview:highlightView];
}

highlightView.alpha = 0.0;

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
highlightView.alpha = 1.0;
[UIView commitAnimations];

Wenn ich Tippen Sie auf die Schaltfläche, der Höhepunkt eingeblendet wird, wie man es erwarten würde. Wenn ich berühre, sich sofort (bevor die animation fertig ist), meine touchesEnded aufgerufen wird. Dies ist das Verhalten, das ich will.

Aber nun, inzwischen bin ich ein großer fan von Blöcken und versuchen, Sie zu nutzen, wo immer möglich. So ersetzte ich die UIView animation-code mit diesem:

[UIView animateWithDuration:0.2 animations:^{
    highlightView.alpha = 1.0;
}];

Ergebnisse: das highlight noch ein-wie erwartet, aber wenn ich die touch-up - vor die animation ist fertig, mein touchesEnded hat nicht aufgerufen. Wenn ich die touch-up - nach die animation ist fertig, mein touchesEnded hat aufgerufen. Was ist denn hier Los?

  • wenn Sie was veröffentlichen?
  • Finger, sorry. Release = touch-up
InformationsquelleAutor Rits | 2010-10-09
Schreibe einen Kommentar