5

私は現在、UIGestureRecognizers と競合しており、すべてが互いに適切に配置されています。画面上にいくつかの正方形 (UIView) があり、ユーザーがパンとピンチ (ビューのスケーリングに使用) を行うことができます。メイン ビューに UIPinchGestureRecognizer を追加し、正方形を追加して、焦点を合わせて正方形を拡大縮小できるようにしました。画面内で移動できるように、各正方形に UIPanGestureRecognizers も追加しました。この問題は、指が他の正方形を横切って移動しているときに、選択した正方形をつまんで拡大縮小すると明らかになります。私のデバッグに基づいて、つまんでいる指が焦点の合っていない四角形を横切ると、つまむジェスチャーをキャンセルするタッチを食べるようです。「[pan requireGestureRecognizerToFail: pinch]」の使用 ピンチを優先しますが、連続パン認識エンジンが起動しなくなったため、作成して発行します。また、 UIPinchRecognizer を正方形に直接追加しようとしましたが、これは機能しますが、ジェスチャには正方形の境界内にあるという制約があり、正方形が縮小されすぎるとうまく機能しません。これを回避する方法はありますか?私は何かが足りないのですか?

4

1 に答える 1

3

問題を回避する 1 つの方法は、すべての UIGestureRecognizers (おそらくこのビューの UIViewController) に対して単一の共通デリゲートを設定することです。そのデリゲートは、ピンチ ジェスチャ レコグナイザーが「Began」または「Changed」状態 (つまり、ピンチを認識して処理していた) の場合、gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer に対して NO を返すことができます。これにより、ピンチ ジェスチャ中にパン ジェスチャ レコグナイザーがタッチを食べるのを防ぐことができます。

インターフェイス ファイルでは、ピンチ ジェスチャ レコグナイザーへの参照を保存する必要があります。

@interface MyViewController : UIViewController <UIGestureRecognizerDelegate> {
  UIGestureRecognizer *pinchGestureRecognizer;
}

また、実装では、渡されるジェスチャ レコグナイザーの状態ではなく、ピンチ ジェスチャ レコグナイザーの状態を確認してください。

@implementation MyViewController

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
  if(pinchGestureRecognizer.state == UIGestureRecognizerStateBegan ||
     pinchGestureRecognizer.state == UIGestureRecognizerStateChanged) 
  {
    return NO;
  }
  else
  {
    return YES;
  }
}
于 2010-10-26T19:30:40.737 に答える