13

私はに取り組んでいますCAShapeLayer。非線形パスを描画しようとしています。フレームをに設定したいので、メソッドをCAShapeLayer使用してからフレームを取得できます。CGPathGetPathBoundingBoxCGPathRef

コードは次のとおりです。

CGMutablePathRef path = CGPathCreateMutable();
CGPathAddArc(path, NULL, rect.size.width/2, rect.size.height/2, 100, (0), (M_PI_2), NO);
CGPathAddArc(path, NULL, rect.size.width/2, rect.size.height/2, 100-50, (M_PI_2), (0), YES);
CGPathCloseSubpath(path);
CAShapeLayer* arcLayer = [[CAShapeLayer alloc]init];
arcLayer.path = path;
arcLayer.frame = CGPathGetPathBoundingBox(path);
arcLayer.bounds = CGPathGetPathBoundingBox(path);
[self.layer addSublayer:arcLayer]; ` 

コードを注意深く参照してください。同じフレームと境界を CAShapeLayer に設定しました。問題は、境界 (フレームと同じ) を設定していない場合、コンテンツが表示されないか、フレーム内にコンテンツが表示されないことです。なぜですか?助けてくださいありがとうございます。

4

4 に答える 4

10

以下はCALayerドキュメントからの引用です。

フレーム四角形は、スーパーレイヤーの座標空間で指定されたレイヤーの位置とサイズです。レイヤーの場合、フレームの四角形は、bounds、anchorPoint、および position プロパティの値から派生した計算されたプロパティです。このプロパティに新しい値を割り当てると、レイヤーの位置と境界のプロパティが、指定した四角形に一致するように変更されます。長方形内の各座標の値は、ポイント単位で測定されます。

CAShapeLayer をframe単独で設定すると、割り当てられた CGRect の元の値は保持されず、サイズのみが保持されます。原点を設定するとbounds、原点が保持されるため、適切な場所に表示されます。また、位置の値を、形状を表示する場所の中心点に設定する必要があります。

CGMutablePathRef path = CGPathCreateMutable();
CGPathAddArc(path, NULL, rect.size.width/2, rect.size.height/2, 100, (0), (M_PI_2), NO);
CGPathAddArc(path, NULL, rect.size.width/2, rect.size.height/2, 100-50, (M_PI_2), (0), YES);
CGPathCloseSubpath(path);
CAShapeLayer* arcLayer = [CAShapeLayer layer];
arcLayer.path = path;
CGRect pathRect = CGPathGetPathBoundingBox(path);
arcLayer.bounds = pathRect;
arcLayer.position = CGPointMake(CGRectGetMidX(pathRect), CGRectGetMidY(pathRect));
[self.layer addSublayer:arcLayer];
于 2013-12-30T06:53:29.450 に答える
0

設定しないと、 が に設定されてboundsいるように動作します。誰がそれを望んでいますか?:DanchorPoint[0, 0]

于 2014-06-24T09:43:39.583 に答える
0

私の経験では、 a の を設定するpositionだけで、CAShapeLayer必要な場所に表示するのに完全に十分です。を設定するbounds必要はありません。

そのように使用するには、 CoreAnimationTextサンプル コードを参照してください。

于 2013-12-30T11:58:19.367 に答える