Pregunta

He estado leyendo a través de la documentación sin embargo, no es inmediatamente claro para mí cómo dibujar un polígono usando CGPath. Todo lo que tiene que hacer es llamar la CGPath en torno a algo como esto:

__
\  \ 
 \  \
  \__\

¿Podría alguien por favor proporcionar un fragmento sobre la manera de hacer esto?

Además Asumo CGPathContainsPoint le ayudará a determinar si un punto está dentro de estos caminos ?, ¿o la ruta de acceso tiene que ser un dibujo sólido

También cómo puedo mover el cgpath alrededor? Es esto tan fácil como cambiar algo así como el origen como en CGRect?

Gracias.

-Oscar

¿Fue útil?

Solución

Debe hacerlo de esta manera:

- (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);
}

Tenga en cuenta que aquí, los puntos es el conjunto de puntos que desea dibujar el polígono para. Por lo que debe ser la ruta circular como:. Usted está dibujando un triángulo de puntos (x1, x2, x3) entonces usted debe pasar en serie (x1, x2, x3, x1)

Espero que esto ayude.

Otros consejos

Este es un ejemplo de cómo crear un triángulo usando CGPath, es suficiente para poner los puntos.

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 es el resultado

triángulo con CGPath

QuartzDemo aplicación de Apple. Tiene código para hacer esto, así como muchas otras funciones de dibujo de cuarzo.

de Draelach respuesta actualizada a 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)

CS193P clase de Stanford en el iPhone tenía un proyecto llamado HelloPoly que podría ser exactamente lo que quiere - ver clase página principal de la especificación y luego ver el video de la forma en que se llevó a cabo (y soluciones de google de las personas que realizaron la asignación).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top