변경) 그 레이어 아래에 나는 CAShapeLayer 인 Drawing 레이어를 가지고 있습니다. 두 레이어가 모두 살아있는 내 관점에서, 현재 CALayerDelegate를 사용하고 있습니다. CALayerDelegate는 탭 제스처 (탭 제스처 선택기가 CAShapeLayer에서 setNeedsDisplay를 호출)에 대한 응답으로 주어진 색상의 CGPath를 사용하여 포인트를 그립니다. 내가 가지고있는 문제는 내가 색을 바꾼다면 이전의 모든 점이 자동으로 새로 선택된 색이 될 것입니다. 좋지 않습니다 ... 원래 색을 유지하기 위해 각 부경 (즉 점)이 필요합니다 ... 아마도 일부 코드는 주제에 좀 더 많은 빛을 흘렸다 :CAShapeLayer 경로 색상은 내가 내 질문의 제목은 내가 여기 그것을 통해 실행하겠습니다 때문에 가장 설명하지 않을 수 있습니다 알고, 그래서
대리인
- (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);
}
}
을 그리고 내 탭 제스처 인식기 : (참고 : drawingView.drawingPath은 재사용)
- (void)viewTapped:(UITapGestureRecognizer *)recognizer {
CGPoint touchPoint = [recognizer locationInView:recognizer.view];
startPoint = endPoint = touchPoint;
[drawingLayer setNeedsDisplay];
}
누군가 내가 여기에서 잘못하고있는 것을 나에게 보여줄 수 있다면 나는 황홀 할 것이다! :
입력 해 주셔서 감사합니다. 당신이 말한 것은 당신이 말하고자하는 것은 내가 그린 각 탭 (그리고 이후 라인)에 대해 각 서브 패스와 해당 색상을 "저장"해야한다는 것입니다. 나는 의심 스러웠다.하지만 예를 들어 수백 개의 서브 패스 (배열로 말하면)가 있다면 극히 비효율적이 될 수 있다고 상상한다. 흠 ... 아마 빈 이미지를 사용하여 셰이프 레이어 대신 이미지로 그릴 수 있습니까? 나는 그것이 더 효율적일지도 모른다는 것을 상상할 것이다 .... – johnnyd
이미지로 드로잉하는 것은 그 대안이 아니라는 것을 명심해야한다. 범용 솔루션으로 컴포넌트를 저장하는 것이 좋지만 이미지가 더 잘 작동하려면 꼭 참조하십시오. :) –