3

周りにストロークが描かれたCAShapeLayerを含む があります。CGMutablePath私のアプリでは、これを変換しCAShapeLayerて、特定の時間にサイズを増減します。を変換するCAShapeLayerと、strokeも変換されます。理想は変形時も常に 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

描画された表現 (CAShapeLayer) ではなく、CGPath 自体を変換します。

CGPathCreateMutableCopyByTransformingPath - CGPath リファレンスをよく見てください。

CGPathCreateMutableCopyByTransformingPath

変換行列によって変換されたグラフィックス パスの変更可能なコピーを作成します。

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

パラメーター

pathコピーするパス。

transformアフィン変換行列へのポインター、または変換が必要ない場合は NULL。指定されている場合、Quartz は新しいパスのすべての要素に変換を適用します。戻り値 transform パラメータによって変換された、指定されたパスの新しい変更可能なコピー。このオブジェクトを解放する責任があります。

提供状況 iOS 5.0 以降で利用可能です。CGPath.h で宣言

于 2012-12-25T19:54:40.883 に答える