0

こんにちはみんな、以下のコードは暗い境界線を持つ小さな灰色の長方形を作ります。コーナーラジオが機能しておらず、理由がわかりません。maskToBounds= trueを適用しようとしましたが、オブジェクト全体が非表示になっています...

どうすればこれを達成できますか?ありがとう

CGRect r = CGRectMake(conX, conY, 220, 50);
    UIBezierPath* conPath = [UIBezierPath bezierPathWithRect:r];
    CAShapeLayer* conLayer = [CAShapeLayer layer];
    conLayer.path = conPath.CGPath;
    conLayer.cornerRadius = 5.0;
    UIColor *bg = [UIColor colorWithWhite:1 alpha:0.7];
    [conLayer setFillColor:bg.CGColor];
    [conLayer setStrokeColor:[UIColor grayColor].CGColor];
    [[self layer] addSublayer:conLayer];
4

1 に答える 1

6

アップデート:

あなたは単にUIBezierPath( roundedRect: CGRect, cornerRadius: CGFloat).CGPathあなたの丸いrectパスを作成するために使うことができます


代わりに、丸い長方形のパスを使用することをお勧めします。

CGRect r = { .size = { 220.0f, 50.0f } } ;

CAShapeLayer * layer = [ CAShapeLayer layer ] ;
layer.path = CGPathCreateRoundRect( r, 5.0f ) ;

どこにCGPathCreateRoundRect()ありますか

CGPathRef CGPathCreateRoundRect( const CGRect r, const CGFloat cornerRadius )
{
    CGMutablePathRef p = CGPathCreateMutable() ;

    CGPathMoveToPoint( p, NULL, r.origin.x + cornerRadius, r.origin.y ) ;

    CGFloat maxX = CGRectGetMaxX( r ) ;
    CGFloat maxY = CGRectGetMaxY( r ) ;

    CGPathAddArcToPoint( p, NULL, maxX, r.origin.y, maxX, r.origin.y + cornerRadius, cornerRadius ) ;
    CGPathAddArcToPoint( p, NULL, maxX, maxY, maxX - cornerRadius, maxY, cornerRadius ) ;

    CGPathAddArcToPoint( p, NULL, r.origin.x, maxY, r.origin.x, maxY - cornerRadius, cornerRadius ) ;
    CGPathAddArcToPoint( p, NULL, r.origin.x, r.origin.y, r.origin.x + cornerRadius, r.origin.y, cornerRadius ) ;

    return p ;
}
于 2012-08-26T23:25:16.307 に答える