0

アプリに簡単な描画機能を追加していますが、ユーザーが破線を描画できるようにしたいと考えています。CAShapeLayer を追加し、パスを設定して、描画ルーチンを正常に動作させています。

ただし、破線を描画しようとすると、ユーザーが非常に高速に描画した場合にのみ破線が表示されます。ゆっくり描くと、ダッシュが束になって線がしっかりします。

ステップ 1. 新しい描画レイヤーを開始します。一部のコードは明らかに省略されています。

// CAShapeLayer
// Dashed pattern is arbitrary - I've tried a variety of values
[self.currentDrawLayer setLineDashPattern:[NSArray arrayWithObjects:
                                          [NSNumber numberWithInt:6],
                                          [NSNumber numberWithInt:12],
                                          nil]];

currentPenPath = [UIBezierPath bezierPath];    
[currentPenPath moveToPoint:currentPoint];

手順 2. ユーザーが描画するときにポイントを追加し、レイヤーを更新します。

[currentPenPath addLineToPoint:currentPoint];
[currentPenPath moveToPoint:currentPoint];
[[self currentDrawLayer] setPath:currentPenPath.CGPath];

ユーザーが好きなだけ遅くまたは速く描画できるようにし、描画中に一貫したダッシュを使用できるようにしたいと考えています。最初にすべてのポイントまたは何かを滑らかにする必要がありますか?

ユーザーが描くときにダッシュを描く簡単な方法はありますか?

ここに画像の説明を入力

任意のガイダンスをいただければ幸いです。

4

1 に答える 1

0

私は解決策を見つけました-そして、描画中にも機能する解決策です!

いくつかのコード...

else if (sender.state == UIGestureRecognizerStateChanged)
{
    CGFloat distance = sqrtf(powf((point.x - currentPenPoint.x), 2) + powf((point.y - currentPenPoint.y), 2));

    if (distance > 20) // TODO: define magic number after some testing
    {
        currentPenPoint = point;
        [self drawPenLine];
    }

    <snip>
}

次の記事を参考にしました: UIBezierPath を使用してスムーズな直線を描画するには?

ピタゴラスを使用して、前のポイント間の距離を見つけることができ、十分に離れている場合は、ポイントを追加して線を引きます。このようにして、破線が等間隔になります。

于 2012-08-29T00:08:08.230 に答える