2014-03-05 4 views
2

CGPath 및 CAShapeLayer로 페인트 (그리기 화면)를 만들었습니다. 이제 클라이언트가 출력 이미지를 확장 가능하게하고 SVG 키트 SVG Kit을 찾았지만이 라이브러리를 사용하는 방법을 모르겠습니다. 도서관 예에서 찾을 수 없었고 모범이 아니 었습니다! 누구든지이 라이브러리를 사용하여 CGPath를 SVG로 변환하는 방법을 알고 있거나 자습서를 줄 수 있습니까?SVG 출력으로 CGPath로 그리기

미리 감사드립니다.

답변

9

at this file on GitHub으로 시작할 수 있습니다. CGPathRef를 SVG 경로의 d 속성으로 변환하는 루틴이 있습니다. 내가 썼어.

클래스 메서드의 서명은 + (NSString *) svgPathFromCGPath : (CGPathRef) aPath; [업데이트 : 아래에 추가 코드]

#import "SVGPathGenerator.h" 

...

CGMutablePathRef pathToBuild = CGPathCreateMutable(); 
CGPathMoveToPoint(pathToBuild, nil, 10, 10); 
CGPathAddQuadCurveToPoint(pathToBuild, nil, 20, 0, 30, 40); 
CGPathAddCurveToPoint(pathToBuild, nil, 20, 40, 40, 30, 100, 90); 
CGPathAddLineToPoint(pathToBuild, nil, 50, 100); 

NSString* aDAttribute = [SVGPathGenerator svgPathFromCGPath:pathToBuild]; 
NSLog(@"%@",aDAttribute); 

출력 : M10.0 10.0Q20.0 40.0C20.0 0.0 30.0 40.0 40.0 30.0 100.0 90.0L50.0 100.0

호가 추가되면 출력은 거의 일치하지 않습니다. SVG의 호와 Quartz의 호가 완전히 다르게 설명되어 있기 때문입니다.

CGRect boundingBox = CGPathGetPathBoundingBox(pathToBuild); 

NSString* svgAsString = [NSString stringWithFormat:@" <?xml version=\"1.0\" encoding=\"UTF-8\"?> \ 
         <!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"> \ 
         <svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewport-fill=\"none\" viewBox=\"%lf, %lf, %lf, %lf\" version=\"1.1\" height=\"%lf\" width=\"%lf\" > \ 
         <path fill=\"none\" stroke=\"green\" d=\"%@\" /> \ 
         </svg>", 
         boundingBox.origin.x, boundingBox.origin.y, boundingBox.size.width, boundingBox.size.height, boundingBox.size.height, boundingBox.size.width, aDAttribute 
         ]; 

NSData* utf8Data = [svgAsString dataUsingEncoding:NSUTF8StringEncoding]; 
[utf8Data writeToFile:pathToFile atomically:YES]; 

(나는이 코드를 컴파일하지 않은 경우) : 간단한 SVG 파일로 출력을 원하는 경우

, 그럼 당신이 뭔가를 할 수 있습니다.

+0

안녕하세요, 많은 도움을 주셔서 감사합니다. 많은 도움을 요청하지 않으면 어떻게 svgPathFromCGPath 함수를 사용할 수 있습니까? 감사합니다. 좋은 하루 되세요! –

+0

확인, 스 니펫이 추가되었습니다. –

+0

안녕하세요, 귀하의 응답을 주셔서 감사합니다하지만이 함수를 본 내 질문은 내가 SVGPath 변환 CGPath 만든 후 SVG 파일을 만드는 루틴을 무엇입니까. 나 좀 도와 줘서 고맙다. 좋은 하루 되세요! –

관련 문제