0

在我的代码中,我将手势添加到数组中。那就是我提到的:

- (void)handlePanGesture:(UIPanGestureRecognizer *)panGestureRecognizer{
     [arrayLineGestures addObject:panGestureRecognizer];
     [arrayAllGestures addObject:[arrayLineGestures copy]];

   }

所以一段时间后我想再次使用它们并使用以下代码:

for (int i=0; i<[arrayAllGestures count]; i++) {
    for (int k=0;k<[[arrayAllGestures objectAtIndex:i]count]; k++) {
        UIPanGestureRecognizer *panGestureRecognizer=(UIPanGestureRecognizer *)[[arrayAllGestures objectAtIndex:i]objectAtIndex:k];           
        const CGPoint point = [[CCDirector sharedDirector] convertToGL:[panGestureRecognizer locationInView:panGestureRecognizer.view]];
        if (panGestureRecognizer.state == UIGestureRecognizerStateBegan) {Nslog(@"began")}

但是这段代码不起作用。它将 pangesture 状态显示为 UIGestureRecognizerStatePossible。但在我将它们添加到数组之前,我检查了没有人是 UIGestureRecognizerStatePossible 的状态。我看不到错误。

谢谢。

4

1 回答 1

0

stateany 的仅UIGestureRecognizer在您在处理程序中时有效。您传入的panGestureRecognizer不是状态快照,而是对识别器的对象引用。当您将它存储在一个数组中并稍后尝试引用它时,它state是无效的,因为识别器的生命周期可能已经过期。

如果你遍历你的数组,你可能会发现所有的识别器都是同一个对象。我不知道这是否得到保证,所以不要依赖它。

于 2012-11-08T15:56:47.523 回答