8

我正在制作一个图像编辑器,它可以创建不同的形状对象,如圆形、三角形和方形,也可以更新或删除。所以我用来CAShapeLayer创建形状对象。

现在我还想在图像上画一条线,它也可以更新或删除,所以我使用了 bezierpath 并CAShapeLayer创建了这条线,它工作正常。但是现在的问题是,当我想选择任何现有的线时,可以在靠近线工具的任何地方选择它,因为CAShapeLayer还设置了从起点到终点的直线填充区域。

我的问题是如何使用CAShapeLayer.

这是我创建行的代码:

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;

对此的任何想法将不胜感激。

4

2 回答 2

5

你能试试这个。它为我工作

    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];
于 2014-12-04T11:06:02.363 回答
0

我知道你我也遇到过这个问题,试试这个:

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... 
}
于 2016-07-27T03:55:09.530 回答