【问题标题】:Getting issue in CGPath Scale在 CGPath Scale 中遇到问题
【发布时间】:2013-08-26 04:24:22
【问题描述】:

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

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

【问题讨论】:

  • 那么问题出在哪里?您在屏幕上看到的哪些不符合您的需求?
  • 我已经绘制了多边形,然后尝试缩放它,当我缩放多边形时,缩放的多边形在不同的地方绘制。不是我绘制初始多边形的地方。

标签: ios cgpath cashapelayer


【解决方案1】:

问题是你习惯了 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;
}

【讨论】:

    猜你喜欢
    • 2020-10-03
    • 2021-03-02
    • 2017-11-12
    • 2013-11-09
    • 2014-05-26
    • 2021-07-18
    • 2018-01-31
    • 2020-03-06
    • 1970-01-01
    相关资源
    最近更新 更多