为什么我无法从数组中获取手势状态

时间:2012-11-08 14:14:04

标签: ios nsarray uigesturerecognizer

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

- (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。我看不出错误。

感谢。

1 个答案:

答案 0 :(得分:0)

任何state的{​​{1}}只有在您处理程序时才有效。传入的UIGestureRecognizer不是状态快照,而是识别器的对象引用。当您将其存储在数组中并稍后尝试引用时,panGestureRecognizer无效,因为识别器的生命周期可能已过期。

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