2016-10-03 4 views
0

開始する前に、私はyourView.userInteractionEnabled = NO;がオプションですが、最初にその状況を説明します。他のUIViewがスワイプされたときに1つのUIViewでユーザーの操作を無効にする

私はこれらのオブジェクトがUIViewであり、stoneOnestoneTwoです。私は4 UISwipeGestureRecognizerのオブジェクトを上下、左右につけて添付しています。これらの「石」を5x5のグリッドの周りをスワイプすると想像してください。

私がしたくないことは、同時に両方をスワイプできることです。

現在、このバグはまだ問題です。すべてのスワイプ方向のレイアウトを表すswipeLeft:というメソッドを示します。私は私が私のUIViewオブジェクトと対話することができたときに遅延を作成してみました、物事の

- (IBAction)swipeLeft:(UISwipeGestureRecognizer *)recognizer { 
     _oldMove1 = _move1; 
     _oldMove2 = _move2; 
     if (recognizer.view == _oneStone 
       && recognizer.direction == UISwipeGestureRecognizerDirectionLeft) { 
      _twoStone.userInteractionEnabled = NO; 
      _oneStone = recognizer.view; 
      [self moveOne:CGPointMake(-1, 0) withView:_oneStone]; 
      self.move1++; 
      // 'causeADelay:' runs _twoStone.userInteractionEnabled = YES; 
      [self performSelector:@selector(causeADelay:) withObject:_twoStone afterDelay:1]; 
     } else if (recognizer.view == _twoStone 
       && recognizer.direction == UISwipeGestureRecognizerDirectionLeft) { 
      _oneStone.userInteractionEnabled = NO; 
      _twoStone = recognizer.view; 
      [self moveTwo:CGPointMake(-1, 0) withView:_twoStone]; 
      self.move2++; 
      [self performSelector:@selector(causeADelay:) withObject:_oneStone afterDelay:1]; 
     } 
     self.moveCount++; 

}

一つ。これは、半分の時間をおいて相互作用するのを待っている場合にのみ機能しました。完全な遅延が発生し、すべてが機能します。

私はあなたがそれらを同時にスワイプするとバグです。それはスワイプのジェスチャーが付いているからですか?

私はまた、サブビューとしてオブジェクトを削除して再適用しようとしました...明らかに機能しませんでした。私はデッドエンドのゲームを持っていなければ、本当にこれが必要です。私が最初に始めたときにコーディングするのは初めてだったので、Cocos2dやゲーム開発のプラットフォームを考えずに開発しました。

答えて

1

あり、いくつかの解決策がありますが、ここでは特に簡単なものです:

が石からスワイプジェスチャー認識器を取り外し、石の共通スーパーに代わりに取り付けます。これは、問題を解決します。なぜなら、同じビュー上にあるジェスチャ認識プログラムが1度だけ認識するからです。は、いつでも認識します。

もちろん、ヒットテストを使用して、スワイプされているストーンがあればそれを探す必要があります。しかし、それは簡単な実装の詳細であり、支払う小さな価格です。

もちろん、別のクールな機能は、合計で4つのジェスチャーレコグナイザが必要なことです。

+0

ゲームのポイントと矛盾しますか?各石は1x1(5x5グリッドの正方形のサイズ)です。 5x5グリッド全体にスワイプジェスチャ認識機能が含まれていると、個々のストーンが相互作用するのを防ぐことができますか?または、私はまだ石の一つに触れることに頼ることができますか、それはタッチを受けたその特定の石だったように見える?ありがとう –

+0

_user_は、誰がタッチを検出しているかを知らない。ユーザーには、彼は周りに石を押しているように見えます。タッチを検出した人以外はすべて同じ方法で動作します。見える? – matt

+0

ヒットテストが素晴らしいと思う、それを見て待つことはできません。絶対に(それがまだ何であるかを知らなくても)支払う小さな値段。ありがとう、空白トン! –

関連する問題