0

私はQuartz 2Dにかなり慣れていません。

次のシナリオを想像してください。

円形のミニ マップ ビューが表示されます。地図の上に三角形を描いています(今は弧は重要ではありません)。この形状は可視領域を表します。

ユーザーが向きを変えると、ミニマップに沿って三角形を回転させる必要があります。

現在、これはパスがどのように描画されているかです:

CGAffineTransform transform = CGAffineTransformMakeRotation(angleInRadians);

CGPath visibleAreaPath = CGPathCreateMutable();

CGPathMoveToPoint(visibleAreaPath, &transform, miniMapCenter.x, miniMapCenter.y);
CGPathAddLineToPoint(visibleAreaPath, &transform, 18.0, 8.0);
CGPathAddLineToPoint(visibleAreaPath, &transform, 66.0, 8.0);

CGPathCloseSubpath(visibleAreaPath);

次に、次のように CAShapeLayer を使用してパスを描画します。

CALayer *rootLayer = [visibleAreaView layer];

visibleAreaShape = [CAShapeLayer layer];
[visibleAreaShape setFillColor:[UIColor colorWithHue:0.584 saturation:0.8 brightness:0.9 alpha:0.6].CGColor];
[visibleAreaShape setFillRule:kCAFillRuleNonZero];
[visibleAreaShape setAnchorPoint:CGPointMake(0.5, 0.5)];
[rootLayer addSublayer:visibleAreaShape];
[visibleAreaShape setPath:visibleAreaPath];

パスは回転していますが、指定された原点に基づいていません。私が望むのはパスを回転させることであるため、レイヤーのアンカーポイントを設定しても役に立たないことに注意してください(ミニに表示されるポイントを決定するために使用するため、最終的には表示する必要さえありません地図)。

これを達成する方法についてのアイデアはありますか? ありがとうございました。

4

1 に答える 1

0

ポイントを極形式で保存し、必要に応じてパスに変換することをお勧めします。極座標での回転は非常に簡単です (シータ値を変更するだけです)。

于 2010-01-21T04:47:30.377 に答える