したがって、質問のタイトルが最も説明的ではない可能性があることを知っているので、ここで実行します。
基本的に私が持っているのは、(レイヤーのコンテンツ プロパティを使用して) 画像を表示したもので、そのレイヤーの下に CAShapeLayer である Drawing レイヤーがあります。両方のレイヤーが存在する私のビューでは、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];
}
誰かがここで私が間違っていることを教えてくれたら、私は有頂天になるでしょう! :(