IOS:延迟动画

时间:2013-09-15 07:51:07

标签: ios objective-c

我想知道最好的方法是:

你有这个功能:

- (void)launchAirplane:(int)whichAirplane {

 // Add score lables 
 // Start particle effect
 // Move airplane (whichAirplane)
 // Remove airplan 
}

你有10架飞机,它们彼此相邻。每架飞机应在前一架飞机后延迟0.1秒发射。因此飞机1在0秒后发射,飞机2在0.1秒后发射,飞机3在0.2秒后发射等等。

所以有几种方法可以做到这一点:

  1. 将GCD与dispatch_after一起使用(但dispatch_after非常不准确,0.1秒的延迟可能差异达到我注意到的30%)。
  2. 的NSTimer
  3. CADiplayLink。

2 个答案:

答案 0 :(得分:1)

我会这样做:

NSArray *airplanes = ... // here you are initializing your airplanes array
NSTimeInterval *duration = 1.0f;


[airplanes enumerateObjectsUsingBlock:^(Airplane *plane, NSUInteger idx, BOOL *stop) {
    [UIView animateWithDuration:duration delay:0.1 * idx options:0 animations:^{
        // do your airplane animation here
    } completion:^(BOOL finished) {

    }];
}];

答案 1 :(得分:0)

如果你想保持延迟以完成飞机的动画,最好的方法是在递归函数中使用完成块进行动画,例如:假设您的飞机物体驻留在一个阵列中,并且您的动画逻辑位于平面模型内,这将使您在发射第一个或第n个平面时所有平面都以恒定延迟启动。

- (void)launchAirplane:(int)whichAirplane {

if (whichAirplane >= [airplanesArray count])
 return;

AeroPlane *plane = [airplanesArray objectAtIndex:whichAirplane];

[plane flyWithAnimationDuration:0.1 completionBlock:^{
 [self launchAirPlane:++whichAirplane];
}];

}