转换一个描边的 CAShapeLayer
Posted
技术标签:
【中文标题】转换一个描边的 CAShapeLayer【英文标题】:Transforming a Stroked CAShapeLayer 【发布时间】:2012-12-25 19:46:54 【问题描述】:我有一个CAShapeLayer
,其中包含一个CGMutablePath
,它周围画了一个笔划。在我的应用程序中,我将这个CAShapeLayer
转换为在特定时间增加/减小它的大小。我注意到当我转换CAShapeLayer
时,stroke
也被转换了。理想情况下,即使CAShapeLayers
发生转换,我也希望始终将stroke
的lineWidth
保持为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】:转换 CGPath 本身,而不是其绘制的表示(CAShapeLayer)。
仔细看看CGPathCreateMutableCopyByTransformingPath - CGPath Reference
CGPathCreateMutableCopyByTransformingPath
创建由 a 转换的图形路径的可变副本 变换矩阵。
CGMutablePathRef CGPathCreateMutableCopyByTransformingPath(
CGPathRef path,
const CGAffineTransform *transform
);
参数
path
要复制的路径。
transform
指向仿射变换矩阵的指针,如果不需要变换,则为 NULL。如果指定,Quartz 将转换应用于新路径的所有元素。
返回值
由 transform 参数转换的指定路径的新的可变副本。你有责任释放这个对象。
可用性 在 ios 5.0 及更高版本中可用。 宣布于 CGPath.h
【讨论】:
感谢您的回复。如果我只是在每次转换时替换它的路径,这不会带走使用 CAShapeLayer 的一些好处吗?会不会和只在drawRect中画到上下文一样吗? 很抱歉,目前我手头没有更好的解决方案 - 我不知道任何其他方法可以达到这种效果。以上是关于转换一个描边的 CAShapeLayer的主要内容,如果未能解决你的问题,请参考以下文章