Immer wenn Sie ... animiert verwenden: YES/NO wird das Cocoa-Framework feststellen, ob es das kann/kann und oft scheitert es. Wie Michael gesagt hat, du bist vielleicht nicht auf dem Hauptthread oder wer weiß was. Wenn Sie sich die neuesten Lion APIs für die Vollbildanimation in einem NSWindow ansehen, finden Sie verschiedene Delegaten für die Animation, die keine Details liefern. Ich würde also nicht erwarten, dass Apple mit einem Animator zurückkehren und solche Funktionen hinzufügen würde.
Um Ihre Frage zu beantworten, würde ich in erster Linie meine eigenen Animationen mit Core Animationen verwenden. Sie sind wirklich nicht so schlimm. Um Ihnen den Einstieg, können Sie eine Kategorie oder Klasse Methode der Einfachheit halber wie folgt erstellen:
+ (void) animateWithDuration:(NSTimeInterval)duration
animation:(void(^)())animationBlock
completion:(void(^)())completionBlock {
[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) {
if (duration > 0) [context setDuration:duration];
[context setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault]];
if (animationBlock) animationBlock();
} completionHandler:^ {
if (completionBlock) completionBlock();
}];
}
Sie können dann verwenden, wie so für mehrere Animationen. Wie so ...
[AnimationContext animateWithDuration:myDuration animation:^{
// You can use whatever animation you want here or even nest
CABasicAnimation *fade = /* opacity animation */;
[view.layer addAnimation:fade forKey:nil];
} completion:^{
// Do some completion here.
}];
Eine Anmerkung, Sie haben mehr Kontrolle über Ihre Animationen auf diese Weise.
Ich hoffe, dies beantwortet, was Sie suchen.
(Huge Hinweis, mein Beispiel ist für Mac OS X. Auf iOS das Äquivalent zu NSAnimationContext ist mit CATransaction einzuwickeln)
Manchmal hält es Arbeitsmittel .. ?? Es wirft einen Fehler oder eine Ausnahme oder es tut nichts? –
App funktioniert gut (kein Absturz), nur Animation ist weg, wenn VC gedrückt wird. – DixieFlatline
vielleicht rufen Sie diese Methode von einem anderen Thread/Queue? Wie Webcallback, Blöcke etc. –