CGPath con esquema

Estoy intentando dibujar un CGPath que tenga un golpe por su golpe.

Básicamente, quiero dibujar una línea usando CGPath. Luego quiero volver y dibujar líneas en ambos lados de la última CGPath, lo que le da el efecto de que es contorno.

Esta línea puede doblarse y girar de cualquier forma, pero siempre necesito las dos líneas en el exterior para seguir.

Camino

EDIT: Necesito poder hacer que el centro de la línea sea transparente, pero el contorno es negro.

Use CGPathCreateCopyByStrokingPath para crear una nueva ruta al acortar su antigua ruta con algún ancho. Luego dibuje su nueva ruta usando kCGPathFillStroke .

 - (void)drawRect:(CGRect)rect { CGContextRef context = UIGraphicsGetCurrentContext(); CGMutablePathRef path = CGPathCreateMutable(); CGPathMoveToPoint(path, NULL, 50, 50); CGPathAddLineToPoint(path, NULL, 200, 200); CGPathRef thickPath = CGPathCreateCopyByStrokingPath(path, NULL, 10, kCGLineCapButt, kCGLineJoinBevel, 0); CGContextAddPath(context, thickPath); CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor); CGContextSetFillColorWithColor(context, [UIColor blueColor].CGColor); CGContextSetLineWidth(context, 3); CGContextDrawPath(context, kCGPathFillStroke); CGPathRelease(thickPath); CGPathRelease(path); } 

La solución más simple sería simplemente trazar el path dos veces. Primero con negro con un mayor ancho de trazo y luego trazo la misma ruta de nuevo usando el color azul con un ancho de trazo ligeramente más pequeño.

Editar:
Si no recuerdo CGPathCreateCopyByStrokingPath(...) puede usar CGPathCreateCopyByStrokingPath(...) para crear una nueva ruta que luego pueda recorrer y rellenar. Entonces podrías usar colors semitransparentes.

De la documentation:

CGPathCreateCopyByStrokingPath

Crea una copy acotada de otra ruta.

 CGPathRef CGPathCreateCopyByStrokingPath( CGPathRef path, const CGAffineTransform *transform, CGFloat lineWidth, CGLineCap lineCap, CGLineJoin lineJoin, CGFloat miterLimit ); 

Parámetros
path
La ruta para copyr.

transformar
Un puntero a una matriz de transformación afín, o NULL si no se necesita ninguna transformación. Si se especifica, Quartz aplica la transformación a los elementos de la ruta convertida antes de agregarlos a la nueva ruta.

ancho de línea
El ancho de línea para usar, en unidades de espacio de usuario. El valor debe ser mayor que 0.

lineCap
Un estilo de límite de línea constante-kCGLineCapButt (el valor pnetworkingeterminado), kCGLineCapRound o kCGLineCapSquare. Ver "CGLineCap".

lineJoin
Un valor de combinación de línea: kCGLineJoinMiter (el valor pnetworkingeterminado), kCGLineJoinRound o kCGLineJoinBevel. Ver "CGLineJoin".

MitreLimit
El límite de ingletes para usar.