3

我有一个CAShapeLayer其中包含一个CGMutablePath围绕它绘制的笔划。在我的应用程序中,我将其转换CAShapeLayer为在某些时候增加/减小它的大小。我注意到当我转换 时CAShapeLayerstroke也被转换了。理想情况下,即使转换后,我也希望始终保持 3lineWidth的值。strokeCAShapeLayers

我尝试在转换之前关闭笔画,然后再阅读它,但它没有用:

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;

有谁知道我如何能够完成这项任务?似乎它应该能够在以某种方式转换后重新绘制笔画。

4

1 回答 1

3

转换 CGPath 本身而不是其绘制的表示(CAShapeLayer)。

仔细看看CGPathCreateMutableCopyByTransformingPath - CGPath Reference

CGPathCreateMutableCopyByTransformingPath

创建由变换矩阵变换的图形路径的可变副本。

CGMutablePathRef CGPathCreateMutableCopyByTransformingPath(
   CGPathRef path,
   const CGAffineTransform *transform
);

参数

path要复制的路径。

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

可用性 适用于 iOS 5.0 及更高版本。在 CGPath.h 中声明

于 2012-12-25T19:54:40.883 回答