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

Foi útil?

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

Triangle with CGPath

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).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top