2011-09-20 3 views
1

변경) 그 레이어 아래에 나는 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]; 

}

누군가 내가 여기에서 잘못하고있는 것을 나에게 보여줄 수 있다면 나는 황홀 할 것이다! :

답변

1

레이어를 다시 그릴 때마다 이전에 저장 한 정보 (이 경우 도면 뷰에서)를 사용하여 모든 것을 그릴 수 있습니다.이 정보 만 사용하여 화면의 모든 것을 표현할 수 있어야합니다. 이 경우 충분한 정보를 저장하지 않기 때문에 문제가 발생합니다. 원하는 것은 그리기 경로와 색상이 아니라 일련의 그리기 경로와 색상입니다. 둘 다 포함하는 개체의 목록을 유지해야합니다 드로잉 뷰에있는 것들 중 하나를 그린 다음 각 드로잉을 반복합니다. 현재 색을 변경할 때마다 이미 그려진 것을 추적하여 이전 색과 함께 저장해야합니다. 어떤 색이 경로의 어느 부분에 속하는지 추적하지 못합니다.

+0

입력 해 주셔서 감사합니다. 당신이 말한 것은 당신이 말하고자하는 것은 내가 그린 각 탭 (그리고 이후 라인)에 대해 각 서브 패스와 해당 색상을 "저장"해야한다는 것입니다. 나는 의심 스러웠다.하지만 예를 들어 수백 개의 서브 패스 (배열로 말하면)가 있다면 극히 비효율적이 될 수 있다고 상상한다. 흠 ... 아마 빈 이미지를 사용하여 셰이프 레이어 대신 이미지로 그릴 수 있습니까? 나는 그것이 더 효율적일지도 모른다는 것을 상상할 것이다 .... – johnnyd

+0

이미지로 드로잉하는 것은 그 대안이 아니라는 것을 명심해야한다. 범용 솔루션으로 컴포넌트를 저장하는 것이 좋지만 이미지가 더 잘 작동하려면 꼭 참조하십시오. :) –

관련 문제