Como desenhar polígonos com CGPath?
-
20-09-2019 - |
Pergunta
Eu tenho lido através da documentação, mas não está imediatamente claro para mim como desenhar um polígono usando CGPath. Tudo o que preciso fazer é atrair CGPath em torno de algo assim:
__
\ \
\ \
\__\
Alguém poderia fornecer um trecho sobre como fazer isso?
Além disso, suponho
Além disso, como posso mover o CGPath? Isso é tão fácil quanto mudar algo como a origem como no CGrect?
Obrigada.
-SCAR
Solução
Você deve fazer assim:
- (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);
}
Observe aqui, os pontos são a matriz de pontos para os quais você deseja desenhar o polígono. Portanto, deve ser um caminho circular como: você está desenhando um triângulo de pontos (x1, x2, x3)
Então você deve passar para a matriz (x1, x2, x3, x1)
.
Espero que isto ajude.
Outras dicas
Este é um exemplo de como criar um triângulo usando CGPath, você só precisa colocar os pontos.
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
Este é o resultado
Veja a da Apple Quartzdemo inscrição. Ele tem código para fazer isso, assim como muitas outras funções de desenho de quartzo.
Draelach's Resposta atualizada para Swift 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)
A classe CS193P de Stanford no iPhone tinha um projeto chamado Hellopoly que pode ser exatamente o que você deseja - veja Página inicial da aula Para a especificação e, em seguida, consulte o vídeo de como ele foi implementado (e soluções do Google de pessoas que fizeram a tarefa).