2011-06-11 2 views
5

여러 경로 세그먼트, 단색, 점선, 선, 색상, 호 등으로 구성된 복잡한 UIBezierPath를 만들었습니다. 그래서 지금 가지고 싶습니다. 그것을 CGContext에 렌더링한다.iPhone - UIBezierPath를 CGPath에 복사하고 원본으로 렌더링

그래서, 내가

CGPathRef cgPath = CGPathCreateCopy(aBezierPath.CGPath); 

문제를 사용하여 CGPathReference로 변환하면이이다 : 나는 CGContext의 경로를 그리려는 경우 이론적으로, 나는 획 너비, 색상, 선을 정의해야 스타일, 블렌딩 모드 등이 다를 필요가 있지만, 이미 생성 한 UIBezierPath에는이 모든 정보가 포함되어 있습니다.

CGPath에 CGPath가있는 것처럼 "스탬프"할 수있는 방법이 있는지 궁금합니다. 그래서 모든 원본 정보로 스탬프 처리됩니까?

감사합니다.

+1

UIBezierPath의 스트로크 방식을 사용할 수 있습니까? –

답변

6

DR, 맞습니다. 매우 혼란 스럽습니다!

하지만 Tom이 맞다고 생각합니다. [aBezierPath stroke]를 사용하세요.

그래서, 이런 식으로 뭔가 될 것이다 :

REF 당신이 구축 한 A (CGContextRef).

YOURBEZIERPATH은 (UIBezierPath *)입니다.

필연적으로 그렇게은 "거꾸로 그리기"문제를 처리해야 :

UIGraphicsPushContext(REF); 
CGContextSaveGState(REF); 
CGContextTranslateCTM(REF, 0, the height*); 
CGContextScaleCTM(REF, 1.0, -1.0); 
[YOURBEZIERPATH stroke]; 
CGContextRestoreGState(REF); 
UIGraphicsPopContext(); 

그래서 그게입니다.

Re 아래에 귀하의 의견 : 나는 UIBezierPaths의 배열을 가지고 있습니다. 각 베 지어에는 고유 한 스타일과 색상이 있습니다.

... for 루프로, 하나의 "스트로크"전화를 교체 :

UIGraphicsPushContext(REF); 
CGContextSaveGState(REF); 
CGContextTranslateCTM(REF, 0, the height*); 
CGContextScaleCTM(REF, 1.0, -1.0); 

for each of YOURBEZIERPATH in your array... 
    { 
    CGContextSaveGState(REF); 
    [YOURBEZIERPATH stroke]; 
    CGContextRestoreGState(REF); 
    } 

CGContextRestoreGState(REF); 
UIGraphicsPopContext(); 

당신은 실제로 aBezierPath.CGPath, 또는 그 사본을 사용하여 귀찮게 할 필요가 없습니다.

다시 말하지만, UI와 CG의 두 가지 세계가 매우 혼란 스럽습니다.


* 높이 : 종종 self.frame.size.height와 비슷합니다. 나는 미래의 일반적인 예제 코드를 찾는 사람들을 위해 이것을 포함한다.

+0

고마워, 거의 나를 위해 작동합니다. 내 유일한 문제는 이것입니다 : 나는 문맥에 그려야 UIBezierPaths 배열이 있습니다. 각 베 지어에는 고유 한 스타일과 색상이 있습니다. 메서드를 사용하여 루프에서 패스를 획 긋을 때마다 메서드가 호출 될 때마다 이전에 스트로크 된 패스를 포함하여 모든 패스가 마지막으로 지정된 스타일로 변경됩니다. 예 : 3 가지 경로가 있습니다 : 파선/파란색, 단색/빨간색, 단색/녹색. 첫 번째 실행 후 나는 파선/파란 경로가 있습니다. 두 번째 실행 후 두 개의 솔리드/레드 경로가 있고 세 번째 실행 후에 모든 경로가 솔리드/그린으로 바뀝니다. – SpaceDog

+0

감사합니다. Joe, 나는 몇 가지 개념으로 착각했지만 지금은 마술처럼 작동하고 있습니다. 감사!!! – SpaceDog

+0

아니요, 저는 그 역변환을했는데, 무언가를 업데이트해야 할 때마다 모든 경로를 그렸습니다. 모든 길을 그리는 것이 내가 생각했던 것만 큼 느리지는 않다. 그러면 아주 잘 진행되고있다. – SpaceDog

관련 문제