CGPath 및 CAShapeLayer로 페인트 (그리기 화면)를 만들었습니다. 이제 클라이언트가 출력 이미지를 확장 가능하게하고 SVG 키트 SVG Kit을 찾았지만이 라이브러리를 사용하는 방법을 모르겠습니다. 도서관 예에서 찾을 수 없었고 모범이 아니 었습니다! 누구든지이 라이브러리를 사용하여 CGPath를 SVG로 변환하는 방법을 알고 있거나 자습서를 줄 수 있습니까?SVG 출력으로 CGPath로 그리기
미리 감사드립니다.
CGPath 및 CAShapeLayer로 페인트 (그리기 화면)를 만들었습니다. 이제 클라이언트가 출력 이미지를 확장 가능하게하고 SVG 키트 SVG Kit을 찾았지만이 라이브러리를 사용하는 방법을 모르겠습니다. 도서관 예에서 찾을 수 없었고 모범이 아니 었습니다! 누구든지이 라이브러리를 사용하여 CGPath를 SVG로 변환하는 방법을 알고 있거나 자습서를 줄 수 있습니까?SVG 출력으로 CGPath로 그리기
미리 감사드립니다.
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 파일로 출력을 원하는 경우
, 그럼 당신이 뭔가를 할 수 있습니다.
안녕하세요, 많은 도움을 주셔서 감사합니다. 많은 도움을 요청하지 않으면 어떻게 svgPathFromCGPath 함수를 사용할 수 있습니까? 감사합니다. 좋은 하루 되세요! –
확인, 스 니펫이 추가되었습니다. –
안녕하세요, 귀하의 응답을 주셔서 감사합니다하지만이 함수를 본 내 질문은 내가 SVGPath 변환 CGPath 만든 후 SVG 파일을 만드는 루틴을 무엇입니까. 나 좀 도와 줘서 고맙다. 좋은 하루 되세요! –