Ich versuche eine Methode immer dann aufzurufen, wenn diese Animation endet, aber in einigen Fällen, zum Beispiel wenn der Benutzer die App verlässt, wird sein Vervollständigungsblock nie aufgerufen. Auch wenn ein VC mit seiner Animation zur gleichen Zeit wie die UIView-Animation angezeigt wird, wird der Completion-Block nie aufgerufen.UIView Animation Vervollständigungsblock wird nicht aufgerufen, wenn die Animation unterbrochen wird
Was soll ich tun, um sicherzustellen, dass der Callback auch dann aufgerufen wird, wenn die Animation irgendwie unterbrochen ist? Sollte ich UIView Animation Completion Block überhaupt nicht verwenden und stattdessen etwas anderes verwenden? Bitte erleuchte mich..!
-(void)action {
[UIView animateWithDuration:0.3
delay:0.0
options:UIViewAnimationOptionCurveEaseOut
animations:^{
self.doorLeft.frame = CGRectMake(0, 0, self.doorLeft.frame.size.width, self.doorLeft.frame.size.height);
self.doorRight.frame = CGRectMake(self.frame.size.width -self.doorRight.frame.size.width, 0, self.doorRight.frame.size.width, self.doorRight.frame.size.height);
} completion:^(BOOL finished){
if (finished) {
switch (self.type) {
case 0:
[self.delegate startTOship];
break;
case 1:
[self.delegate gameTOship];
break;
case 2:
[self.delegate shipTOgame];
break;
case 3:
[self.delegate shipTOmap];
break;
case 4:
[self.delegate gameTOmap];
break;
case 5:
[self.delegate mapTOgame];
break;
case 6:
[self.delegate mapTOship];
break;
}
[UIView animateWithDuration:0.3
delay:0.5
options:UIViewAnimationOptionCurveEaseOut
animations:^{
self.doorLeft.frame = CGRectMake(-self.doorLeft.frame.size.width, 0, self.doorLeft.frame.size.width, self.doorLeft.frame.size.height);
self.doorRight.frame = CGRectMake(self.doorRight.frame.size.width *2, 0, self.doorRight.frame.size.width, self.doorRight.frame.size.height);
} completion:^(BOOL finished){
if (finished) {
[self actionEnded];
}
}
];
}
}
];}
Hmmm was ist, wenn ich eine "verkettete" Animation habe, die mehrere Animationen nacheinander in meiner bearbeiteten Frage hat? – durazno
Fügen Sie anschließend den Festschreibungsblock nach dem letzten Animationscode hinzu. – Tander
Hmm aber ich denke, ich müsste doch mit CAKeyframeAnimation gehen, denn was ich gerade mache, braucht genau das. Stellt CAKeyframeAnimation auch sicher, dass der Completion-Block sofort aufgerufen wird, wenn die Animation unterbrochen wird, oder muss ich ihn zusammen mit CATransition verwenden? – durazno