Кварц 2D Траектория вращения - PullRequest
0 голосов
/ 18 ноября 2009

Я довольно новичок в 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];

Путь вращается, но не на основе данного источника. Имейте в виду, что установка точки привязки слоя мне не помогает, поскольку мне нужно повернуть путь (в конечном итоге мне даже не нужно его отображать, поскольку я буду использовать его, чтобы определить, какие точки видны на мини карта).

Есть идеи, как этого добиться? Спасибо.

1 Ответ

0 голосов
/ 21 января 2010

Я бы посоветовал вам сохранить точки в полярной форме и при необходимости преобразовать их в путь. Вращать в полярных координатах очень легко (просто измените значение тета).

...