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")}

しかし、このコードは機能しません。パンジェスチャの状態を UIGestureRecognizerStatePossible として示しています。しかし、それらを配列に追加する前に、誰も UIGestureRecognizerStatePossible ではない状態を確認しました。間違いが見当たりませんでした。

ありがとう。

4

1 に答える 1

0

stateanyUIGestureRecognizerは、ハンドラーにいる間のみ有効です。渡される は状態のpanGestureRecognizerスナップショットではなく、レコグナイザーへのオブジェクト参照です。配列に保存して後で参照しようとすると、レコグナイザーstateのライフサイクルが期限切れになっている可能性があるため、有効ではありません。

配列を繰り返し処理すると、すべてのレコグナイザーが同じオブジェクトであることがわかるでしょう。ただし、これが保証されているかどうかはわかりませんので、それに依存しないでください。

于 2012-11-08T15:56:47.523 に答える