2

我想知道最好的方法是什么:

你有这个功能:

- (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. NS定时器
  3. CADiplay链接。
4

2 回答 2

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) {

    }];
}];
于 2013-09-15T09:36:50.300 回答
0

如果您想保持延迟以完成飞机的动画,最好在递归函数内使用完成块进行动画,例如假设您的飞机对象驻留在数组中并且您的动画逻辑在飞机模型中,这在您发射第一架或第 n 架飞机的那一刻,所有飞机都会持续延迟发射。

- (void)launchAirplane:(int)whichAirplane {

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

AeroPlane *plane = [airplanesArray objectAtIndex:whichAirplane];

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

}
于 2013-09-15T09:22:31.540 回答