Drawing a line with Bezierpath using CAShapeLayer object

10,264

Can you try this. Its work for me

    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];
Share:
10,264
Usman Awan
Author by

Usman Awan

I have to utilize and further develop my programming and IT skills as broadly as possible, in efficient ways so as to benefit the organization. Specialties: , iOS Development (iPhone/iPad Apps), Software Programing (Java, C++, ObjectiveC and Swift), Web Programming (JSF, Tiles, Richfaces, JSP, Spring, Hibernate, Struts 2, PHP, HTML, CSS, JS, Jquery)

Updated on June 14, 2022

Comments

  • Usman Awan
    Usman Awan almost 2 years

    I am making an image editor which can create different shapes objects like circle, triangle and square which can also be updated or removed. So I have used CAShapeLayer for creating shapes objects.

    Now I also want to draw a line on image which can also be updated or removed so I have used bezierpath and CAShapeLayer to create the line, it is working fine. BUT now the problem is that when I want to select any existing line it can be selected any where close to line tool because CAShapeLayer also set the fill region which will be a straight line from start point to end point.

    My question is that how can I create line with no fill region using CAShapeLayer.

    Here is my code for creating line:

    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;
    

    Any idea on this will be really appreciated.

    • Shmidt
      Shmidt over 10 years
      It works. Probably you forgot to add layer [self.view.layer addSublayer:line];
    • Usman Awan
      Usman Awan over 10 years
      I did add this line too, it creates the line fine but it also fill region from start point to end point and consider it as a layer part. So the problem is that whenever I try to tap near line line layer get selected.
    • Ric Santos
      Ric Santos almost 10 years
      Should you be using [linePath addLineToPoint:point2]?
    • Usman Awan
      Usman Awan almost 10 years
      point1, point2 , point3 are the three arbitrary points
    • Ayaz
      Ayaz over 9 years
      if you got the solution then share it so it will helpful to other person.
  • Usman Awan
    Usman Awan over 9 years
    will definitely check it and let you know.
  • Max MacLeod
    Max MacLeod over 9 years
    are you not missing [linePath stroke]?
  • Dominic K
    Dominic K about 8 years
    You don't need [linePath stroke] here, and in fact, you'll probably get context errors if you do (unless you manually start a context or use this in drawRect) - calling stroke uses Core Graphics, but right here we want to use Core Animation.