70

ユーザーの指の下にUIPanGestureRecognizerあるオブジェクト ( ) を追跡するために使用しています。UIImageView私は X 軸の動きだけに関心があり、タッチが Y 軸のオブジェクトのフレームの上または下にずれている場合は、タッチを終了したいと考えています。

タッチがオブジェクトの Y 境界内にあるかどうかを判断するために必要なものはすべて揃っていますが、タッチ イベントをキャンセルする方法がわかりません。レコグナイザーのcancelsTouchesInViewプロパティを反転しても、私が望んでいるようには見えません。

ありがとう!

4

7 に答える 7

161

この小さなトリックは私にとってはうまくいきます。

@implementation UIGestureRecognizer (Cancel)

- (void)cancel {
    self.enabled = NO;
    self.enabled = YES;
}

@end

UIGestureRecognizer @enabledドキュメントから:

ジェスチャ レコグナイザを無効にして、タッチを受け付けないようにします。デフォルト値は YES です。ジェスチャ レコグナイザーが現在ジェスチャを認識しているときにこのプロパティを NO に変更すると、ジェスチャ レコグナイザーはキャンセルされた状態に移行します。

于 2010-11-12T17:38:41.700 に答える
4

アップルのドキュメントからこれはどうですか:

@property(nonatomic, getter=isEnabled) BOOL enabled

ジェスチャ レコグナイザを無効にして、タッチを受け付けないようにします。デフォルト値は YES です。ジェスチャ レコグナイザーが現在ジェスチャを認識しているときにこのプロパティを NO に変更すると、ジェスチャ レコグナイザーはキャンセルされた状態に移行します。

于 2012-05-15T12:56:53.607 に答える
0

これを処理するには、いくつかの方法があります。

  1. -ignoreTouch:withEvent:カスタム パン ジェスチャ レコグナイザ サブクラスを作成している場合は、関心のある領域から外れていることに気付いたときにレコグナイザ内から呼び出すことで、これを簡単に行うことができます。

  2. 標準の Pan レコグナイザーを使用していて、タッチが問題なく開始されるため (デリゲート関数でそれを防ぎたくない場合)、レコグナイザーのターゲット アクションを受け取ったときにのみ、実際に区別することができます。translationInView:またはlocationInView:戻り値の Y 値を確認し、適切にクランプします。

于 2011-08-15T14:38:29.317 に答える