所以,我知道我的问题的标题可能不是最具描述性的,所以我会在这里完成它:
基本上我所拥有的是用图像查看(使用图层的内容属性),在该图层下我有一个图层,它是一个CAShapeLayer。在我的视图中,两个图层都存在,我还有一个CALayerDelegate,现在,只使用具有给定颜色的CGPath来绘制一个点以响应轻击手势(点击手势选择器调用CAShapeLayer上的setNeedsDisplay)。我的问题是,如果我改变颜色,然后点击视图所有以前的点自动成为新选择的颜色...不好......我需要每个子路径(即点)保持其原始颜色...也许一些代码将更多地阐述这个主题:
委托(注意:drawView.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];
}
如果有人能告诉我这里我做错了什么,我会欣喜若狂! :(答案 0 :(得分:1)
每次重绘图层时,它都会使用您之前保存的信息(在本例中为图纸视图)来绘制所有内容。您必须能够仅使用此信息表示屏幕上的所有内容。在这种情况下,您遇到了麻烦,因为您没有保存足够的信息。你想要的不仅仅是绘图路径和颜色,还有一系列绘图路径和颜色。您需要在drawingView中保留包含这两个对象的对象列表,并迭代它们,绘制每个对象。每次更改当前颜色时,都需要跟踪已绘制的颜色并将其与旧颜色一起保存,这样您就不会忘记哪种颜色属于路径的哪个部分。