आप CGPathApply
का प्रयोग कर एक राह में तत्वों के माध्यम से पुनरावृति कर सकते हैं। यह केवल एक लाइनर की तुलना में थोड़ा अधिक जटिल है, लेकिन यदि आप इसे एक साधारण सहायक समारोह में पैकेज करते हैं, तो यह आपके लिए उपयोगी हो सकता है।
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;
}
}
इसका इस्तेमाल करने के लिए आप क्या करेंगे (इस भाग मैं एक सहायक समारोह के अंदर रखा है):
PathTransformInfo info;
info.path = CGPathCreateMutable();
info.transform = CGAffineTransformMakeScale(2, 1);
CGPathApply(originalPath, &info, PathTransformer);
तब्दील पथ यहाँ एक संस्करण है कि एक नया रास्ता बनाता है और यह बदल देती है इस बिंदु पर info.path
में है।
धन्यवाद! यह वही करेगा जो मैंने मांगा था, लेकिन दुर्भाग्य से, यह मुझे पूरे पथ को फिर से बनाने के प्रदर्शन का लाभ नहीं देगा। यदि यह एकमात्र उत्तर है, तो मैं इसे समाधान के रूप में चिह्नित करूंगा। – MrMage