2

重複の可能性:
UIPanGestureRecognizerでvelocityInViewを利用する

touchMovedに基づいてパスを描画するアプリを作成しています。タッチの速度に基づいて線の幅を作りたいです。私はこの効果を達成することができますが、これには滑らかさがありません。

コード:

-(float) clampf:(float) v: (float) min: (float) max 
{
    if( v < min ) v = min;
    if( v > max ) v = max;

    return v;
}

- (float)extractSize:(UIPanGestureRecognizer *)panGestureRecognizer
{
    vel = [gesture velocityInView:self.view];
    mag = sqrtf((vel.x * vel.x) + (vel.y * vel.y)); // pythagoras theorem (a(square) + b(square) = c(square))
    final = mag/166.0f;
    final = [self clampf:final :1 :40];
    NSLog(@"%f", final);

    if ([velocities count] > 1) {
        final =  final * 0.2f + [[velocities objectAtIndex:[velocities count] - 1] floatValue] * 0.8f;
    }
    [velocities addObject:[NSNumber numberWithFloat:final]];
    return final;
}

しかし、私はこのようなものを手に入れています:

ここに画像の説明を入力してください

4

1 に答える 1

2

私は以前に同様の効果を出しました。オリジナルのタッチイベントメソッド(touchesBeganなど)を使用して、自分でベロシティを計算しました。すべてが大丈夫に見えます。

ユーザーが指を動かしているときにこの方法で常に正しい結果が得られるかどうかはvelocityInViewわかりません。速度を自分で計算して、問題が解決したかどうかを確認する必要があります。

于 2012-09-14T18:54:50.713 に答える