CAShapeLayer のストロークがフレーム外に伸びるのはなぜですか? 質問する

CAShapeLayer のストロークがフレーム外に伸びるのはなぜですか? 質問する

サンプルコードは次のとおりです:

//Called by VC:

HICircleView *circleView = [[HICircleView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];

// init of circle view

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        CAShapeLayer *borderLayer = [CAShapeLayer layer];
        borderLayer.fillColor = [UIColor whiteColor].CGColor;
        borderLayer.path = [UIBezierPath bezierPathWithOvalInRect:self.frame].CGPath;
        borderLayer.strokeColor = [[UIColor redColor] CGColor];
        borderLayer.lineWidth = 5;
        [self.layer addSublayer:borderLayer];
    }
    return self;
}

ここに画像の説明を入力してください

わかりました。回答ありがとうございます。iをシフトするには:

CGRect rect = CGRectMake(3, 3, self.frame.size.width, self.frame.size.height);
borderLayer.path = [UIBezierPath bezierPathWithOvalInRect:rect].CGPath;

そして線幅を6にしました。

ベストアンサー1

を設定するとlineWidth線が描画され、実際のパスはその描画された線のちょうど中央になります。

描画した線を何かに揃えたい場合は、パスを半分だけシフトする必要がありますlineWidth

- (void)applyTransform:(CGAffineTransform)transformonを使用してパスをシフトしUIBezierPath、変換を適用できます。

描画したパスを特定の領域内に収めたい場合、パスを移動しても効果はありません。その場合は、より小さなパスを作成してください。線幅 5 で 100ptx100pt の四角形を描画する場合は、95ptx95pt の四角形 (両側に 2.5pt のスペース) にパスを描画する必要があります。

おすすめ記事