转换抚摸CAShapeLayer
问题描述:
我有一个CAShapeLayer
其中包含一个CGMutablePath
有一个中风绘制周围。在我的应用程序中,我改变了这个CAShapeLayer
以在特定时间增加/减少它的大小。我注意到当我改变CAShapeLayer
时,stroke
也得到了改变。理想情况下,即使CAShapeLayers
已转换,我也希望始终保持stroke
的lineWidth
为3。转换抚摸CAShapeLayer
我试图切断行程之前,我先变换后事后readding它,但它没有工作:
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;
有谁知道我如何能够完成这项任务?似乎它应该能够以某种方式转换后重新绘制笔画。
答
转换CGPath本身而不是它的绘制表示(CAShapeLayer)。
有在CGPathCreateMutableCopyByTransformingPath - CGPath Reference
CGPathCreateMutableCopyByTransformingPath
创建由 变换矩阵变换图形路径的可变副本密切关注。
CGMutablePathRef CGPathCreateMutableCopyByTransformingPath(
CGPathRef path,
const CGAffineTransform *transform
);
参数
path
复制的路径。
transform
指向仿射转换矩阵的指针,如果不需要转换,则为NULL。如果指定,Quartz将转换应用于新路径的所有元素。 返回值 由transform参数变换的指定路径的新的可变副本。你有责任释放这个对象。
可用性 适用于iOS 5.0或更高版本。 宣称在 CGPath.h
感谢您的答复。如果我只是每次改变它的路径,就不会带走使用CAShapeLayer的一些好处吗?难道它只是绘制到drawRect中的上下文吗? –
我很抱歉,但我目前没有更好的解决方案为你 - 我不知道任何其他方式来实现这一效果。 – Till