对每个元素循环array: CCAction,但在动作完成后只进行一次回调



我使用UIPanGestureRecognizer来检测平移/滑动。当滑动完成并且触摸结束时,我在NSSet中对12个CCNodeColors运行CCAction。

当CCActions正在运行时,我禁用了UIPanGestureRecognizer,这样用户就不能在前一个动画仍在运行时滑动。在CCActions完成后,我再次启用UIPanGestureRecognizer。

问题: *callback动作运行12次。因此,在完成其他11个操作之前启用了UIPanGestureRecognizer。在最后一个动作*move完成后,只运行*callback的最佳方法是什么?

(或者这是一个问题吗?)

下面是简化后的代码:
if (sender.state == UIGestureRecognizerStateEnded ) {
    sender.enabled = NO;
    for (CCNodeColor *node in nodeSet) {
        CCActionMoveTo *move = [CCActionMoveTo actionWithDuration:1.0 position:newPosition];
        CCActionCallBlock *callback = [CCActionCallBlock actionWithBlock:^{
            sender.enabled = YES;
        }];
        CCActionSequence *seq = [CCActionSequence actionWithArray:@[move, callback]];
        [node runAction:seq];
    }
}

这里有一个"简化"的可能答案

if (sender.state == UIGestureRecognizerStateEnded ) {
    sender.enabled = NO;
    for (CCNodeColor *node in nodeSet) {
        CCActionMoveTo *move = [CCActionMoveTo actionWithDuration:1.0 position:newPosition];
       [node runAction:move];
    }
    CCActionDelay *wait = [CCActionDelay actionWithDuration:1.05f]; 
    CCActionCallBlock *callback = [CCActionCallBlock actionWithBlock:^{
        sender.enabled = YES;
    }];
    CCActionSequence *seq = [CCActionSequence actionWithArray:@[wait, callback]];
    [self runAction:seq];
}

最新更新