Dibujando una línea con Bezierpath usando el object CAShapeLayer

Estoy haciendo un editor de imágenes que puede crear diferentes forms de objects, como círculos, triangularjs y cuadrados, que también pueden actualizarse o eliminarse. Entonces, he usado CAShapeLayer para crear objects de forms.

Ahora también quiero dibujar una línea en la image que también se puede actualizar o eliminar, así que he usado bezierpath y CAShapeLayer para crear la línea, está funcionando bien. PERO ahora el problema es que cuando quiero seleccionar cualquier línea existente, se puede seleccionar cualquier herramienta cerca de la línea porque CAShapeLayer también establece la región de relleno que será una línea recta desde el punto de inicio hasta el punto final.

Mi pregunta es que ¿cómo puedo crear una línea sin región de relleno con CAShapeLayer ?

Aquí está mi código para crear una línea:

 CAShapeLayer *line = [CAShapeLayer layer]; // Using bezierpath to make line UIBezierPath *linePath=[UIBezierPath bezierPath]; // Creating L with line [linePath moveToPoint:point1]; [linePath addToPoint:point2]; [linePath addToPoint:point3]; line.path=linePath.CGPath; // Configure the appearence of the line line.fillColor = Nil; line.opacity = 1.0; line.strokeColor = [UIColor whiteColor].CGColor; 

Cualquier idea sobre esto será muy apreciada.

¿Puedes probar esto? Su trabajo para mi

  CAShapeLayer *line = [CAShapeLayer layer]; UIBezierPath *linePath=[UIBezierPath bezierPath]; [linePath moveToPoint:CGPointMake(startx, starty)]; [linePath addLineToPoint:CGPointMake(endx, endy)]; line.lineWidth = 10.0; line.path=linePath.CGPath; line.fillColor = shapecolor.CGColor; line.strokeColor = shapecolor.CGColor; [[self.view layer] addSublayer:line]; 

Entiendo que experimenté este problema, así que intente esto:

 GPathRef linePathRef = linePath.CGPath linePathRef = CGPathCreateCopyByStrokingPath(linePathRef, NULL, line.lineWidth, kCGLineCapRound, kCGLineJoinRound, 1); BOOL pathContainsPoint = CGPathContainsPoint(linePathRef, NULL, touchLocation, NO); if(pathContainsPoint){ //Do something with the cashapelayer line... }else{ //Do something here if needed... }