所以,我知道我的問題的標題可能不是最描述,所以我會通過它跑這裏來了: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
繪製成圖像是一種替代方案,銘記它不可逆。作爲一個通用的解決方案,我建議保存這些組件,但是如果一張圖像能夠爲您更好地工作,無論如何。 :) –