所以,我知道我的问题的标题可能不是最描述,所以我会通过它跑这里来了: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];
}
如果有人能告诉我我在做什么错在这里,我会欣喜若狂! :(
感谢您的输入!So ess你所说的内容是我必须“保存”每个子路径及其对应的颜色,以便绘制每个水龙头(以及后面的线)?我怀疑它会降低到这一点,但我会想象,如果我有例如数百个子路径(例如在数组中),它可能变得非常低效。嗯...也许我可以使用一个空的图像,并绘制到它而不是shapelayer?我想这可能会更有效率.... – johnnyd
绘制成图像是一种替代方案,铭记它不可逆。作为一个通用的解决方案,我建议保存这些组件,但是如果一张图像能够为您更好地工作,无论如何。 :) –