0

私はこのようなものUIViewを持っていUILongPressGestureRecognizerます:

    movementGestureRecognizer = [[UILongPressGestureRecognizer alloc] init];
    [movementGestureRecognizer setDelegate:self];
    [movementGestureRecognizer setMinimumPressDuration:0.0f];
    [self addGestureRecognizer:movementGestureRecognizer];

名前でわかると思いますが、長押しするとすぐにUIView動かせるようになります。

問題は、他の種類のジェスチャも追加できるようにしたいということです。たとえば、次のようになります。

       optionsGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(options:)];
        [optionsGestureRecognizer setNumberOfTapsRequired:2];
        [self addGestureRecognizer:optionsGestureRecognizer];

問題は、がすべてのジェスチャーを「吸い込んでいる」options:ため、電話をかけることができないことです。movementGestureRecognizerそれを防ぐ、キャンセルする、movementGestureRecognizerまたは遅らせる方法はありますか?


1.0を編集

options:次のことを行うと、から電話をかけることができTapGestureRecognizerます。

    [movementGestureRecognizer setMinimumPressDuration:0.1f];

それでも、使いやすさの点では完璧なソリューションではありません...

4

3 に答える 3

0

私は次のことを行うことで解決策を思いつくことができました:

1)状態に基づいてUIView無効化および有効化することにより、「ステートマシン」を実装します。UIGestureRecognizers

2)UIPanGestureRecognizer移動にはaを使用しUIView'sます。

3)そしてこの質問。

于 2012-10-17T13:35:56.327 に答える
0

よくわかりませんが、次のgestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:ようにデリゲートを実装してみてください。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return YES;
}

さらに、次のようにジェスチャレコグナイザー間の依存関係を指定できます。

[optionsGestureRecognizer requireGestureRecognizerToFail: movementGestureRecognizer];

UIGestureRecognizerクラスリファレンスで詳細を読むことをお勧めします!

まったく同じトピックについて詳しく説明している良い投稿もここにあります!

于 2012-10-15T12:57:33.263 に答える
0

タップと長押しの違いは、タッチ面から指を離す前に指を押し続ける時間です。したがって、最小プレス時間は0より長くする必要があります。

さらに、次のことができます。

movementGestureRecognizer.delaysTouchesBegan = NO;
movementGestureRecognizer.delaysTouchesEnded = NO;

これにより、システムは長押しだけでなくタップも認識できるようになります。

于 2012-10-15T13:25:12.990 に答える