1

私はこれを実装しました:

- (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)panGestureRecognizer {
    CGPoint translation = [panGestureRecognizer translationInView:someView];
    return fabs(translation.y) > fabs(translation.x);
}

(ここで概説されているように。)

ただし、ユーザーが対角線のすぐ上で垂直にパンすると、開始されます。垂直と見なされるものに対して、許容範囲をより厳密にするにはどうすればよいですか?

基本的に、下の画像は私が求めているものを説明しています。最初の図は、その領域内で現在検出されているものであり、2 番目の図は、私が実行したいことです。

ここに画像の説明を入力

4

3 に答える 3

4

atan2f指定されたxとの値を使用yして、垂直からの角度を計算できます。たとえば、角度が垂直から 4 度未満の場合にジェスチャを開始するには、次のようにします。

- (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gesture {
    CGPoint translation = [gesture translationInView:gesture.view];
    if (translation.x != 0 || translation.y != 0) {
        CGFloat angle = atan2f(fabs(translation.x), fabs(translation.y));
        return angle < (4.0 * M_PI / 180.0); // four degrees, but in radians
    }
    return FALSE;
}
于 2015-02-17T00:00:45.423 に答える
1

純粋な垂直方向のジェスチャーを検出すると、translation.x == 0それであると思います。

同様に、参照した投稿から正しい答えを確認する必要があります。以前の場所と現在の場所を比較する場所。感性を育てることができます。たとえば、私のプロジェクトをチェックして、この感性を使用して定義する場合、アクションが有効 (感性よりも小さいか等しい) または無効 (感性よりも大きい) であることを確認できます。MOVEMENT_SENSIBILITYの中身をチェックRPSliderViewController.m

于 2013-04-14T19:54:58.837 に答える