1

iOS開発を学んでおり、のを見ていUIGestureRecognizerます。

私には見解があります。そのビューをタップすると、 を表示したいと思います。また、押すと「ハイライト」するという点で、UIPopoverControllerのように動作するようにしたいと考えています。UIButton

私がこれを行うと思った方法は、2UIGestureRecognizerの - aUITapGestureRecognizerと aを使用することでしたUILongPressGestureRecognizer

私が直面している問題は、ハイライト メソッドがすぐに呼び出されることです (これは私が望んでいます) が、指を十分に動かすUITapGestureRecognizerとキャンセルされます。その時点で、別のメソッド ( unhighlight) を呼び出して の初期の背景色を復元したいUIViewのですが、これを行う方法がわかりません。

私はこれにまったく慣れていないので、この質問はおそらく基本的なものであり、誰かが私にできる助けに感謝します.

UIViewController

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(togglePopover)];

[self.view addGestureRecognizer:tap];

UILongPressGestureRecognizer *press = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(highlight)];
press.minimumPressDuration = 0.f; //highlight immediately
press.delegate = self; //set the delegate to self
[self.view addGestureRecognizer:highlight];


//the delegate part of the UIViewController
- (BOOL)gestureRecognizer:(UIGestureRecognizer*)gestureRecognizer shouldRecognizeSimultaneouslyWithOtherGestureRecognizer:(UIGestureRecognizer*)otherGestureRecognizer {
  return YES; //allows allow simultaneous recognition of gestures on this view
}
4

2 に答える 2

1

AUITapGestureRecognizerには、具体的なケースで説明した特定の動作があります。

あなたが求めていることは、のような連続ジェスチャー認識エンジンで行うことができますUIPanGestureRecognizer

具体的には、継続的なジェスチャ レコグナイザー アクション メソッドは、ジェスチャ レコグナイザーが通過する状態に従って、一連の呼び出しを受け取ります。

これらの状態の 1 つはUIGestureRecognizerStateCancelledであるため、あなたの場合のようにジェスチャがキャンセルされたことを検出し、ハイライトを削除することでそれに応じて動作するように管理できます。一方、UIGestureRecognizerStateBegan状態でア​​クションが呼び出されると、ボタンが強調表示されます。

あなたのアクションメソッドは次のようになります:

- (IBAction)handlePan:(UIPanGestureRecognizer *)recognizer {

  if (recognizer.state == UIGestureRecognizerStateBegan) {

     ...
  } else if (recognizer.state == UIGestureRecognizerStateCancelled) {

     ...
  }
}

touchesBegan:/touchesMoved:/touchesEnded:完全に別のアプローチは、ニーズに合わせてメソッドを処理する独自のジェスチャ認識サブクラスを作成することです。

UIGestureRecognizer リファレンスを見ると、多くの情報が見つかります。

于 2013-10-16T18:15:04.020 に答える
0

必要な動作が のようなものである場合、UIButton単に を使用できないのはなぜUIButtonですか?

それ以外の場合は、ターゲット メソッド内でジェスチャの状態をキャプチャする必要があります。ジェスチャ レコグナイザーのアクション ターゲットを宣言するときは、ターゲット名の後に必ずコロンを付けてください。

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(togglePopover:)];

次に、 内で、渡されたジェスチャ レコグナイザー-togglePopoverのプロパティを読み取ります。それはここに文書化されています。州を探しています。stateUIGestureRecognizerStateCancelled

于 2013-10-16T18:51:12.767 に答える