0

ユーザーが頂点を指定するためにクリックを入力すると、一連の接続された線が描画されます。私はCGMutablePathRefを構築しています

- (void)addPointToCGMPR: (CGPoint)p
      forNewPolygon: (BOOL)newPoly
{
    if (newPoly)
    {
        CGPathMoveToPoint(cgmpr, NULL, p.x, p.y);
    }
    else
    {
        CGPathAddLineToPoint(cgmpr, NULL, p.x, p.y);
    }
    [self setNeedsDisplay];
}

drawRect: 各点が入力された後に呼び出され、表示のためにコンテキスト CGMutablePathRef が CGContext に追加されます。

- (void)drawRect:(CGRect)rect
{    
    // Set up a context to display
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextAddPath(context, cgmpr);

    CGContextSetLineWidth(context, 1);
    CGContextStrokePath(context);  

    // If NOT empty then Close the context so that box comparison can occur later
    if (!CGContextIsPathEmpty(context))
    {
        CGContextClosePath(context);
    }
}

予想どおり、画面に線が表示されます。私の問題は、ユーザーが最初のポイントを選択した後、画面に何もレンダリングされず、2 番目のポイントが入力されるまでシステムが最初のピックを取得したかどうかわからないままになることです。次のポイントが入力される前であっても、システムが最初のポイントをレンダリングすることを望みます。また、システムが視覚的に異なる方法で選択された各頂点をレンダリングするようにしたいと考えています。現在、頂点はレンダリングされておらず、線のみがレンダリングされています。CGContext にポイントをレンダリングするように依頼する方法はありますか? これらのポイントがレンダリングされるスタイルを指定する方法はありますか? ありがとう。

4

2 に答える 2

1

いいえ。頂点を表現したいものを記述するために別のCGPathを追加して、自分でレンダリングする必要があります。おそらくこれを頻繁に描画するので、必要な場所に簡単にコピーできるように、CGLayerにレンダリングすることをお勧めします。頂点をCALayersに描画して、簡単に移動できるようにすることもできます。ただし、図面のこの部分を設計および管理するのはあなた次第です。

于 2012-04-25T22:00:32.153 に答える
1

点を表現したいものは何でも自由に描くことができます: 小さな四角形、小さな円、画鋲のイメージなど。ポイントをループして、表示したい方法で描画するだけです。私は個人的にこのようなものに使用する傾向がありますCGContextFillEllipseInRect。ポイントごとに、ポイントを囲む四角形を作成して描画します。

CGFloat pointSize = 4;
CGRect pointRect = CGRectMake(point.x - pointSize / 2, point.y - pointSize / 2, pointSize, pointSize);
CGContextFillEllipseInRect(context, pointRect);
于 2012-04-25T22:03:29.320 に答える