转换描边的CAShapeLayer

3
我有一个包含CGMutablePathCAShapeLayer,周围绘制了一条描边线。在我的应用程序中,我会对这个CAShapeLayer进行变换,以便在某些时候增加/减少其大小。我注意到当我变换CAShapeLayer时,stroke也会被变换。理想情况下,即使在CAShapeLayers变换时,我也希望保持strokelineWidth始终为3。

我尝试在变换之前关闭描边线,然后再重新添加,但这并没有起作用:

subLayerShapeLayer.lineWidth = 0;
subLayerShapeLayer.strokeColor = nil;
self.layer.sublayerTransform = CATransform3DScale(self.layer.sublayerTransform, graphicSize.width / self.graphic.size.width, graphicSize.height / self.graphic.size.height, 1);
shapeLayer.strokeColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1].CGColor;;
shapeLayer.lineWidth = 3;

有没有人知道我怎么能完成这个任务?似乎应该可以在变换后重新绘制笔画。

1个回答

3

对CGPath本身进行转换,而不是其绘制表示(CAShapeLayer)。

请仔细查看CGPathCreateMutableCopyByTransformingPath - CGPath参考文献

CGPathCreateMutableCopyByTransformingPath

创建一个可变的图形路径副本,通过变换矩阵进行转换。
CGMutablePathRef CGPathCreateMutableCopyByTransformingPath(
   CGPathRef path,
   const CGAffineTransform *transform
);

参数

path 要复制的路径。

transform 仿射变换矩阵的指针,如果不需要变换则为NULL。如果指定了变换,Quartz将把变换应用于新路径的所有元素。 返回值 通过transform参数转换后的指定路径的新的可变副本。您有责任释放此对象。

可用性 iOS 5.0及更高版本可用。 声明位置 CGPath.h


谢谢回复。如果我每次转换时都只是替换CAShapeLayer的路径,那么这不会削弱使用CAShapeLayer的一些好处吗?这难道不与在drawRect中直接绘制到上下文相同吗? - Ser Pounce
很抱歉,但我目前手头上没有更好的解决方案 - 我不知道其他任何实现该效果的方法。 - Till

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接