당신은 경로의 요소를 반복하는 CGPathApply
를 사용할 수 있습니다. 단 하나의 라이너보다 조금 복잡하지만 단순한 도우미 기능으로 패키지하면 유용 할 것입니다.
PathTransformInfo info;
info.path = CGPathCreateMutable();
info.transform = CGAffineTransformMakeScale(2, 1);
CGPathApply(originalPath, &info, PathTransformer);
변환 된 경로 :
typedef struct {
CGMutablePathRef path;
CGAffineTransform transform;
} PathTransformInfo;
static void
PathTransformer(void *info, const CGPathElement *element)
{
PathTransformInfo *transformerInfo = info;
switch (element->type) {
case kCGPathElementMoveToPoint:
CGPathMoveToPoint(transformerInfo->path, &transformerInfo->transform,
element->points[0].x, element->points[0].y);
break;
case kCGPathElementAddLineToPoint:
CGPathAddLineToPoint(transformerInfo->path, &transformerInfo->transform,
element->points[0].x, element->points[0].y);
break;
case kCGPathElementAddQuadCurveToPoint:
CGPathAddQuadCurveToPoint(transformerInfo->path, &transformerInfo->transform,
element->points[0].x, element->points[0].y,
element->points[1].x, element->points[1].y);
break;
case kCGPathElementAddCurveToPoint:
CGPathAddCurveToPoint(transformerInfo->path, &transformerInfo->transform,
element->points[0].x, element->points[0].y,
element->points[1].x, element->points[1].y,
element->points[2].x, element->points[2].y);
break;
case kCGPathElementCloseSubpath:
CGPathCloseSubpath(transformerInfo->path);
break;
}
}
가 (이 내가 도우미 함수 안에 넣어 것입니다 부분입니다) 할 것입니다 그것을 사용하려면 여기에 새 경로를 생성하고 변환 한 버전이다 이 시점에서 info.path
에 있습니다.
감사합니다! 이것은 내가 요청한 것을 할 것이지만, 안타깝게도 전체 경로를 다시 만들 필요가없는 성능 향상을주지는 못합니다. 이것이 유일한 답으로 남아 있다면, 나는 그것을 해결책으로 표시 할 것입니다. – MrMage