-(void) movePinsToDestinations:(NSArray *)destination withCompletion: (void (^)())block
{
...
[UIView animateWithDuration:animationTime animations:^{
//[self.ReloadBut setTitle:@"Animating " forState:UIControlStateNormal];
for (BGAddressAnnotation * anExistingAnnotation in existingAnnotations) {
if (anExistingAnnotation.destination) {
anExistingAnnotation.coordinate = anExistingAnnotation.destination.coordinate;
}
else
{
anExistingAnnotation.myView.alpha = 0;
}
}
} completion:^(BOOL finished){
NSAssert(finished, @"Not Finished?");
for (BGAddressAnnotation * existingAnnotation in existingAnnotations) {
if ([existingAnnotation.destination.myBiz isEqual: existingAnnotation.myBiz]) {
existingAnnotation.arrayOfBusinesses = existingAnnotation.destination.arrayOfBusinesses;
existingAnnotation.myView.alpha=1;
}
else
{
[self.theMapView removeAnnotation:existingAnnotation];
}
}
// PO([[self class] PrintAllAnnotations: [self annotationExceptUser]]);
// PO([[self class] PrintAllAnnotations: destination]);
PO(@"Reach Completion Block");
if (block)
{
block();
}
else
{
//[self.ReloadBut setTitle:@"Animating Finish" forState:UIControlStateNormal];
}
}];
}
結果:爲什麼立即調用完成塊?
2012-11-04 20:00:05.800 @"Start Animating": Start Animating
2012-11-04 20:00:05.805 @"Reach Completion Block": Reach Completion Block
我設置動畫到10秒運行,但完成塊被稱爲withhin 5 milisecond。什麼可能做到這一點?
一些背景,函數被調用兩次,完成塊應該調用另一個動畫。第二個動畫確實在10秒內完成。指定完成塊會立即調用它還是什麼?
所以我切實做好
[self movePinsToDestinations:self.myCache.annotationsInterMediateState withCompletion:^{
[self movePinsToDestinations:self.myCache.annotationsWeShouldbeDisplaying withCompletion:^{
}];
}];
更新:
出於好奇,我嵌套動畫幾次。
[self movePinsToDestinations:self.myCache.annotationsInterMediateState withCompletion:^{
[self movePinsToDestinations:self.myCache.annotationsWeShouldbeDisplaying withCompletion:^{
[self movePinsToDestinations:emptyAnnotations withCompletion:^{
[self movePinsToDestinations:startOff withCompletion:^{
[self movePinsToDestinations:self.myCache.annotationsInterMediateState withCompletion:^{
[self movePinsToDestinations:self.myCache.annotationsWeShouldbeDisplaying withCompletion:^{
}];
}];
}];
}];
}];
}];
下面是結果:
21:51.9 Start Animating: Start Animating
21:51.9 (animationTime): 10
21:51.9 Reach Completion Block: Reach Completion Block
21:51.9 Start Animating: Start Animating
21:51.9 (animationTime): 10
21:51.9 Reach Completion Block: Reach Completion Block
21:51.9 Start Animating: Start Animating
21:51.9 (animationTime): 10
22:01.9 Reach Completion Block: Reach Completion Block
22:01.9 Start Animating: Start Animating
22:01.9 (animationTime): 10
22:01.9 Reach Completion Block: Reach Completion Block
22:01.9 Start Animating: Start Animating
22:01.9 (animationTime): 10
22:01.9 Reach Completion Block: Reach Completion Block
22:01.9 Start Animating: Start Animating
22:01.9 (animationTime): 10
22:01.9 Reach Completion Block: Reach Completion Block
所以動畫的一個正確完成,該塊被稱爲動畫開始後10秒。
由於在viewDidAddAnnotation中正在調用另一個動畫,因此可能立即調用該塊,但不可能是這種情況,因爲可以同時調用許多不同的動畫。
大多數動畫仍然運行僅僅幾毫秒。一些運行3秒。沒有其他動畫應該運行。
打印'finished'布爾值。我猜想動畫會以某種方式中斷。(完成,@「Not Finished?」); –
NSAssert這就是那條線的用途。確保完成是真實的。永不休息。 –
當沒有動畫時,動畫可能會立即停止嗎?我不認爲這是事實,但這有可能嗎? –