CAShapeLayer路径颜色改变



我知道我的问题的标题可能不是最具描述性的所以我在这里把它过一遍:

基本上我有一个带有图像的视图(使用图层的内容属性),在那个图层下面我有一个绘图层,它是一个CAShapeLayer。在我的视图中,两个图层都存在,我也有一个CALayerDelegate,目前,它只是使用CGPaths以给定的颜色绘制一个点来响应一个点击手势(点击手势选择器调用CAShapeLayer上的setNeedsDisplay)。我遇到的问题是,如果我改变颜色,然后点击视图,所有先前的点都会自动成为新选择的颜色……不太好…我需要每个子路径(即点)保持其原始颜色……也许有一些代码可以更清楚地说明这个主题:

委托(注:drawingView。drawingPath被重用):

- (void)drawLayer:(CAShapeLayer *)theLayer
    inContext:(CGContextRef)theContext {

if (CGPointEqualToPoint(drawingView.startPoint, drawingView.endPoint)) {

    CGPathMoveToPoint(drawingView.drawingPath, NULL, drawingView.startPoint.x, drawingView.startPoint.y);
    CGPathAddEllipseInRect(drawingView.drawingPath, NULL, CGRectMake(drawingView.startPoint.x, drawingView.startPoint.y, drawingView.drawRadius, drawingView.drawRadius));
    CGContextSetFillColorWithColor(theContext, drawingView.currentColor.CGColor);
    CGContextBeginPath(theContext);
    CGContextAddPath(theContext, drawingView.drawingPath);
    CGContextFillPath(theContext);
}

}

和我的手势识别器:

- (void)viewTapped:(UITapGestureRecognizer *)recognizer {
CGPoint touchPoint = [recognizer locationInView:recognizer.view];
startPoint = endPoint = touchPoint;
[drawingLayer setNeedsDisplay];

}

如果有人能告诉我我哪里做错了,我会欣喜若狂的!(

每次你重新绘制你的图层时,它将使用你以前保存的信息(在这种情况下,在你的绘图视图中)来绘制一切。您必须能够仅使用这些信息来表示屏幕上的所有内容。在这种情况下,您会遇到麻烦,因为您没有保存足够的信息。你想要的不仅仅是一个绘制路径和一个颜色,而是一系列的绘制路径和颜色。你将需要在你的drawingView中保留一个包含这两个东西的对象列表,并遍历它们,绘制每个对象。每次更改当前颜色时,您都需要跟踪已经绘制的内容,并将其与旧颜色一起保存,这样您就不会忘记哪个颜色属于路径的哪个部分。

最新更新