CAShapeLayer cornerRadius不在UIBezierPath上工作

Bac*_*tnz 0 iphone objective-c ios

大家好,下面的代码制作了一个带有深色边框的灰色矩形.角落收音机不工作,我无法弄清楚为什么,我已经尝试应用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];
Run Code Online (Sandbox Code Playgroud)

nie*_*bot 6

更新:

您只需使用UIBezierPath( roundedRect: CGRect, cornerRadius: CGFloat).CGPath创建圆形矩形路径即可


我推荐使用圆形矩形路径:

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

CAShapeLayer * layer = [ CAShapeLayer layer ] ;
layer.path = CGPathCreateRoundRect( r, 5.0f ) ;
Run Code Online (Sandbox Code Playgroud)

这里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 ;
}
Run Code Online (Sandbox Code Playgroud)