3

我正在使用CGPath和添加多边形来绘制多边形CAShapeLayer。我想CGPath在用户点击它时缩放我的多边形。我知道如何扩展CGPath。但是,当我单击我的 时CGPath,我的CGPath绘图远离中心,而我在中心绘制多边形。

CGAffineTransform scaleTransform = CGAffineTransformMakeScale(scaleFactor, scaleFactor);
CGPathRef oldPath = polygonLayer.path;
CGPathRef scaledPath = CGPathCreateCopyByTransformingPath(oldPath, &scaleTransform);
polygonLayer.path = scaledPath;
4

1 回答 1

4

问题是您习惯于 UIView 转换,这是从视图的中心完成的。
CGPath 变换是在点上完成的(想象CGPointZero成路径的中心)。
我的解决方案:转换为 CGPointZero 、 scale ,然后返回到您的原始坐标。

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;
}
于 2013-12-02T07:18:57.803 回答