Iphone CAShapeLayer转弯半径为';t在UIBezierPath上工作

Iphone CAShapeLayer转弯半径为';t在UIBezierPath上工作,iphone,objective-c,ios,Iphone,Objective C,Ios,大家好,下面的代码是一个带黑色边框的灰色小矩形。角落里的收音机坏了,我也不知道为什么,我试着应用maskToBounds=true,但这只是隐藏了整个对象 我怎样才能做到这一点?谢谢 CGRect r = CGRectMake(conX, conY, 220, 50); UIBezierPath* conPath = [UIBezierPath bezierPathWithRect:r]; CAShapeLayer* conLayer = [CAShapeLayer layer]

大家好,下面的代码是一个带黑色边框的灰色小矩形。角落里的收音机坏了,我也不知道为什么,我试着应用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];
更新:

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


我建议改为使用圆形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 ;
}
更新:

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


我建议改为使用圆形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 ;
}

如果这是您想要的遮罩效果,请将图层的遮罩属性设置为具有圆形矩形路径的形状图层。谢谢Niels,这太棒了,伙计!:D) 如果这是您想要的遮罩效果,请将图层的遮罩属性设置为具有圆形矩形路径的形状图层。谢谢Niels,这太棒了,伙计!:(D)