1

これらの 2 つの関数を使用して、ユーザーが uiview でゆっくりとドラッグ アンド ドロップしていることを検出します

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)イベント

-(void) touchesMoved:(NSSet*)touches withEvent:(UIEvent*)イベント

ただし、これら2つの方法を使用して、ユーザーが実際にフリック(クイックフリップ) uiview を検出するにはどうすればよいですか?

フリックとドラッグを区別するにはどうすればよいですか?

助けてくれてどうもありがとう!

ジャスティスペニー

4

3 に答える 3

4

このような-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)eventメソッドを使用して、beginPoint と beginTime をマークすることができます。endPoint-(void) touchesEnded:(NSSet*)touches withEvent:(UIEvent*)eventと endTime をマークするメソッドを使用します。次に、速度を計算します。速度としきい値を比較できます(速度は、水平または垂直のみを計算する可能性があります)

于 2013-01-09T03:56:35.543 に答える
1

ジェスチャ レコグナイザを確認する必要があると思います。ジェスチャ レコグナイザは、さまざまなユーザ タッチを区別するのに多くの手間がかかります。あなたが説明しているのは、パンとスワイプのジェスチャーです。これらのそれぞれに対処するための特定のジェスチャ認識クラスがあります。UIGestureRecognizer は親クラスです。最初に確認する必要があります。

于 2013-01-08T22:59:35.990 に答える
1

ドラッグとフリックは通常、速度によって区別されます。1 つの解決策は、距離の式に基づいたアルゴリズムを作成することです。

大まかな例:

CGPoint pointOld = CGPointMake(0, 0); // Not sure if this is valid
CGPoint pointNew = CGPointMate(0, 0); // Just making holders for the
                                      // location of the current and previous touches

float timeInterval = 0.2f;
// However long you think it will take to have enough of a difference in
// distance to distinguish a flick from a drag

float minFlickDist = 100.0f;
// Minimum distance traveled in timeInterval to be considered a flick

- (void)callMeEveryTimeInterval
{
    // Distance formula
    float distBtwnPoints = sqrt( (pointNew.x - pointOld.x) * (pointNew.x - pointOld.x) - (pointNew.y - pointOld.y) * (pointNew.y - pointOld.y) );
    if (distBtwnPoints >= minFlickDist)
    {
        // Flick
    } else {
        // Drag
    }
}

私がうまくいくと思うものの本当に大まかなスケッチ-それが役立つことを願っています.

于 2013-01-09T00:46:01.857 に答える