所以,我知道我的问题的标题可能不是最具描述性的,所以我将在这里进行介绍:
基本上我所拥有的是带有图像的视图(使用图层的内容属性),并且在该图层下我有一个绘图图层,它是一个 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];
}
如果有人能告诉我我在这里做错了什么,我会欣喜若狂!:(