Итак, я знаю, что название моего вопроса может быть не самым описательным, поэтому я рассмотрю его здесь:
По сути, у меня есть вид с изображением (с использованием свойства содержимого слоя), и под этим слоем у меня есть слой Drawing, который является 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];
}
Я был бы в восторге, если бы кто-нибудь показал мне, что я здесь делаю неправильно! (