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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dem neuen Animations-blocks in iOS 4 standardmäßig deaktivieren von Benutzer-Interaktion. Sie übergeben können, eine option, um Ansichten zu reagieren, um Berührungen während der animation unter Verwendung von bit-flags, die in Verbindung mit der
animateWithDuration:delay:options:animations:completion
Methode derUIView
als solche:Dokumentation
nil
alscompletion:
parameter als auch.Eine weitere Sache ist, dass Appple nicht zu empfehlen [UIView beginAnimations:Kontext:], Sie finden es in
beginAnimations
docsWohl Apple markieren können alte Methoden als veraltet in den zukünftigen Versionen nicht zu unterstützen, so dass die Verwendung von block-basierten Methoden ist wirklich mehr bevorzugte Art und Weise für die Durchführung von animation.