我使用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];
}