2016-08-24 2 views
3

ビューをタップするときに関数をトリガする2つの方法の違いを明確にすることはできますか?UITapGestureRecognizerとaddTargetの相違点

1) myView.addTarget(self, action: #selector(myFunctionToTrigger(_:)), forControlEvents: UIControlEvents.TouchUpInside)

2)

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(myFunctionToTrigger(_:))) myView.addGestureRecognizer(tapGesture)
+0

同じtapGestureを再利用して他のビューに割り当てることができます:)もちろん、これは答えではありません – ddb

+0

これは唯一の違いですか?両方のUIViewに適用できますか? –

答えて

1

これは、iOSアプリケーションの取り扱いユーザイベントを実装する2つの全く異なる方法です。

1)。 addTarget() - UIControlクラスのメソッドで、これはTarget-Action Mechanismの一部です。詳細はdocumentationです。

そして、あなたはUIViewUIControlサブクラスにしかなりません。addTargetはありません。

2)。 UIGestureRecognizerサブクラスは、単に特定のビューでのユーザーのジェスチャーを検出して区別するメカニズムです。 、それらの間

主な違いは、ジェスチャ認識装置は、スワイプまたはピンチやズームのようなより複雑なイベントを検出することができるが、-addTargetはまた、そのようなUISegmetedControlとして全てUIControl秒間インターフェースの同じレベルを提供し、ユーザの活動を検出するためのはるかに効率的な方法でありますUISliderなど

私があなたを助けたことを願っています。ここで

0

あなたはUITapGestureRecognizer、UIPanGestureRecognizer ...と他の多くのジェスチャーのように指定されたジェスチャーイベントを追加することができますUITapGestureRecognizerについては違い

です。

ここでは、UIViewaddTarget()のように、UIControlEvents.TouchUpInside ..などのイベントのターゲットを追加できます。

1

抽象化の2つの異なるレベルでのこれらの二つの方法の作業:

    addTarget:action:forControlEvents
  • は、単離されたイベントを提供し、より低いレベルです。スワイプやピンチのようなより複雑なジェスチャーを検出するには、これらのイベントのいくつかを組み合わせて解釈する必要があります。
  • addGestureRecognizerは、通常、アプリケーションが必要とするより高いレベルで動作します。低レベルのイベントを聞き取り、ジェスチャーを検出し、そのジェスチャーに関する特定の情報を提供する特定のジェスチャー・リコジンガーを追加します。

タップの場合、その差は軽微です。しかし、スワイピング、挟み込み、タップ、スワイプ、ピンチング(例えば、画像ビューアまたはマップアプリ)の組み合わせについては、1つまたは複数のジェスチャーレコージナが道のりです。

0

パウヴェルの答えは正しいですが、UIViewのサブクラスであるUIControlViewにのみターゲットを追加できます。 UIViewにUIGestureRecognizerを追加することができます。

ターゲットがジェスチャーよりも低いレベルであるというコドーの答えが間違っている、ジェスチャーは下位レベルのタッチサポートです。 UIControlは、ジェスチャを使用してaddTarget:action:forControlEventsを動作させます。

0

addTargetのためのいくつかの利点があります。

  1. それはビルドイン機能です。同じことをするために別のオブジェクトを初期化する必要はありません。
  2. アクションに反応するタイミングを「touchUpInside」または「touchDown」(またはスライダの場合は「valueChanged」)に設定できます。
  3. addTargetが使用されている場合、ボタンのさまざまな外観(タイトルテキスト、タイトルカラー、コンテンツイメージ、背景イメージ、ハイライトの色など)を設定できます。

上記の利点以外にも、UIControl要素のコーディング規約に近いと思います。

関連する問題