The problem is that you are used to the UIView transform, which is done from the center of the view.
CGPath conversion is done at points (imagine CGPointZero as the center of the path).
My solution: translate to CGPointZero, scale, and then return to the original coordinates.
CGPathRef CGPath_NGCreateCopyByScalingPathAroundCentre(CGPathRef path, const float scale) { CGRect bounding = CGPathGetPathBoundingBox(path); CGPoint pathCenterPoint = CGPointMake(CGRectGetMidX(bounding), CGRectGetMidY(bounding)); CGAffineTransform translateAndScale = CGAffineTransformTranslate( CGAffineTransformMakeScale(scale, scale), - pathCenterPoint.x, -pathCenterPoint.y) ; CGAffineTransform translateBack = CGAffineTransformMakeTranslation(pathCenterPoint.x, pathCenterPoint.y); CGPathRef centeredAndScaled = CGPathCreateCopyByTransformingPath(path, &translateAndScale); CGPathRef translatedPathRef = CGPathCreateCopyByTransformingPath(centeredAndScaled, &translateBack); CGPathRelease(centeredAndScaled); return translatedPathRef; }
source share