转换抚摸CAShapeLayer

问题描述:

我有一个CAShapeLayer其中包含一个CGMutablePath有一个中风绘制周围。在我的应用程序中,我改变了这个CAShapeLayer以在特定时间增加/减少它的大小。我注意到当我改变CAShapeLayer时,stroke也得到了改变。理想情况下,即使CAShapeLayers已转换,我也希望始终保持strokelineWidth为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

+0

感谢您的答复。如果我只是每次改变它的路径,就不会带走使用CAShapeLayer的一些好处吗?难道它只是绘制到drawRect中的上下文吗? –

+0

我很抱歉,但我目前没有更好的解决方案为你 - 我不知道任何其他方式来实现这一效果。 – Till