Как рисовать полигоны с помощью CGPath?
-
20-09-2019 - |
Вопрос
Я читал документацию, однако мне не сразу понятно, как нарисовать многоугольник с помощью CGPath.Все, что мне нужно сделать, это нарисовать CGPath вокруг чего-то вроде этого:
__
\ \
\ \
\__\
Не мог бы кто-нибудь, пожалуйста, предоставить фрагмент о том, как это сделать?
Кроме того, я предполагаю, что CGPathContainsPoint поможет мне определить, находится ли точка внутри такого пути?, или путь должен быть сплошным рисунком
Также, как я могу переместить cgpath?Это так же просто, как изменить что-то вроде источника, как в cgrect?
Спасибо.
-Оскар
Решение
Вы должны сделать это вот так:
- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);
CGContextSetRGBFillColor(context, 0.0, 0.0, 1.0, 1.0);
// Draw them with a 2.0 stroke width so they are a bit more visible.
CGContextSetLineWidth(context, 2.0);
for(int idx = 0; idx < self.points.count; idx++)
{
point = [self.points objectAtIndex:idx];//Edited
if(idx == 0)
{
// move to the first point
CGContextMoveToPoint(context, point.x, point.y);
}
else
{
CGContextAddLineToPoint(context, point.x, point.y);
}
}
CGContextStrokePath(context);
}
Обратите внимание, что точки - это массив точек, для которых вы хотите нарисовать многоугольник.Таким образом, это должен быть круговой путь, подобный:Вы рисуете треугольник из точек (x1, x2, x3)
затем вы должны перейти в array (x1, x2, x3, x1)
.
Надеюсь, это поможет.
Другие советы
Это пример того, как создать треугольник с помощью CGPath, вам нужно только расставить точки.
var path = CGPathCreateMutable()
CGPathMoveToPoint(path, nil, 0, 0) //start from here
CGPathAddLineToPoint(path, nil, 20, 44)
CGPathAddLineToPoint(path, nil, 40, 0)
CGPathAddLineToPoint(path, nil, 0, 0)
//and to use in SpriteKit, for example
var tri = SKShapeNode(path: path)
var color = NSColor.blueColor()
tri.strokeColor = color
tri.fillColor = color
Это и есть результат
Посмотрите на Apple Кварцдемо применение.В нем есть код для выполнения этого, а также многие другие функции рисования Quartz.
Драелах ответ обновлен до Быстрый 4:
let path = CGMutablePath()
path.move(to: CGPoint(x: 0, y: 0))
path.addLine(to: CGPoint(x: 20, y: 44))
path.addLine(to: CGPoint(x: 40, y: 0))
path.addLine(to: CGPoint(x: 0, y: 0))
let tri = SKShapeNode(path: path)
В классе CS193P Стэнфорда для iPhone был проект под названием HelloPoly, который может быть именно тем, что вам нужно - смотрите домашняя страница класса ознакомьтесь со спецификацией, а затем посмотрите видео о том, как это было реализовано (и решения Google от людей, которые выполняли задание).