Итак, я знаю, что название моего вопроса может быть не самым описательным, поэтому я пройдусь по нему здесь:
По сути, у меня есть представление с изображением (с использованием свойства содержимого слоя), и под этим слоем у меня есть слой рисования, который является CAShapeLayer. На мой взгляд, там, где живут оба слоя, у меня также есть CALayerDelegate, который на данный момент просто рисует точку, используя CGPaths с заданным цветом в ответ на жест касания (селектор жестов касания вызывает setNeedsDisplay на CAShapeLayer). Проблема, с которой я сталкиваюсь, заключается в том, что если я изменю цвет, а затем коснитесь вида, все предыдущие точки автоматически станут новым выбранным цветом... не очень хорошо... Мне нужно, чтобы каждый подпуть (т.е. точка) сохранял свой первоначальный цвет... Может быть некоторый код прольет немного больше света на тему:
Делегат (Примечание: 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];
}
Я был бы в восторге, если бы кто-нибудь показал мне, что я здесь делаю неправильно! :(