2014-08-17 1 views
0

UIPanGestureRecognizer를 사용하여 팬/스 와이프를 감지합니다. 스 와이프가 완료되고 터치가 끝나면 NSSet의 12 CCNodeColors에서 CCAction을 실행합니다.루프 스루 배열 : 모든 요소에 대한 CCAction, 작업 완료 후 하나의 콜백 만 가능

CCActions가 실행되는 동안 UIPanGestureRecognizer를 비활성화하므로 이전 애니메이션이 계속 실행되는 동안 사용자가 스 와이프 할 수 없습니다. CCActions가 끝나면 UIPanGestureRecognizer를 다시 활성화합니다.

문제 :*callback 동작은 12 회를 실행합니다. 따라서 UIPanGestureRecognizer는 다른 11 개의 작업이 완료되기 전에 활성화됩니다. *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]; 
    } 
} 

답변

0

는 '단순화'가능한 대답

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]; 

} 
에게 있습니다 :

(? 아니면 전혀 문제가) 여기에

는 단순화 된 코드입니다