通常,在CoreGraphics中绘制贝塞尔路径时,我们可以使用“CGContextSetLineWidth”设置路径的所需粗细,它会在路径的外边界上描边(随着线条宽度的增加,边界似乎会向路径的外部扩展)。我希望我的线条粗细能够在贝塞尔路径内部增长,有没有办法实现这个效果?
通常,在CoreGraphics中绘制贝塞尔路径时,我们可以使用“CGContextSetLineWidth”设置路径的所需粗细,它会在路径的外边界上描边(随着线条宽度的增加,边界似乎会向路径的外部扩展)。我希望我的线条粗细能够在贝塞尔路径内部增长,有没有办法实现这个效果?
viewSize
是路径的边界框
lineWidth
是线条的宽度
bezierPath
是您的 UIBezierPath
CGAffineTransform transform = CGAffineTransformMakeTranslation(lineWidth / 2.0,
lineWidth / 2.0);
transform = CGAffineTransformScale(transform,
(viewSize.width - lineWidth) / viewSize.width,
(viewSize.height - lineWidth) / viewSize.height);
CGPathRef reducedPath = CGPathCreateCopyByTransformingPath(bezierPath.CGPath, &transform);
如果您想保持宽高比,缩放可以修改为在两个轴上都相等,使用两者中的最小因子。
CGFloat scale = viewSize.width < viewSize.height ? (viewSize.width - lineWidth) / viewSize.width :
(viewSize.height - lineWidth) / viewSize.height;
CGAffineTransform transform = CGAffineTransformMakeTranslation(lineWidth / 2.0, lineWidth / 2.0);
transform = CGAffineTransformScale(transform, scale, scale);
CGPathRef reducedPath = CGPathCreateCopyByTransformingPath(bezierPath.CGPath, &transform);