围绕多边形绘制边框

Draw border around a polygon

    -(void)setTopRightCornerWithRadious:(CGFloat)radious View:(UIView*)vw
{
    UIGraphicsGetCurrentContext();
    UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:vw.bounds byRoundingCorners:UIRectCornerTopRight cornerRadii:CGSizeMake(radious, radious)];
    [maskPath closePath];
    CAShapeLayer *maskLayer = [CAShapeLayer layer];
    maskLayer.frame = vw.bounds;
    maskLayer.path = maskPath.CGPath;
    vw.layer.mask=maskLayer;

    if (vw.layer.borderColor) {
        UIColor *color=[UIColor colorWithCGColor:vw.layer.borderColor];
        [color setStroke];
        maskLayer.accessibilityPath.lineWidth=1.0f;
        [maskLayer.accessibilityPath stroke];
    }
}
-(void)setAllBorderForView:(UIView*)vw Color:(UIColor*)color Thickness:(CGFloat)thick
{
    if (vw) {
        vw.layer.borderWidth=thick;
        vw.layer.borderColor=color.CGColor;
    }
}

我想在这两个按钮周围画一个边框。我用 CAShapeLayer 和 UIBezierPath 尝试了很多次,但都失败了,可能是我错过了什么。他们中的一些人使用 UIView 解决了这个问题,但我不想要那样。我只想通过使用 CAShapeLayer and/or UIBezierPath.

来解决问题

这是我的示例代码...我的错在哪里????一开始我设置了边界,然后我尝试设置角。少数时候边框颜色可能存在也可能不存在。

在您的自定义按钮 class 中,您设置为:

UIBezierPath outerPAth=  [UIBezierPath bezirePath];
    [[UIColor WhiteColor] setStroke];
    outlinePath.lineWidth=5.0;
    [outlinePath stroke];

如果您只需要在按钮周围添加边框,请将描边添加到按钮贝塞尔曲线路径。

- (void)drawRect: (CGRect)frame
{
UIBezierPath* rectangle2Path = [UIBezierPath bezierPathWithRoundedRect: CGRectMake(x,y,widht,height) byRoundingCorners: UIRectCornerTopRight cornerRadii: CGSizeMake(17.25, 17.25)];
[rectangle2Path closePath];
[UIColor.grayColor setFill];
[rectangle2Path fill];
[UIColor.redColor setStroke];
rectangle2Path.lineWidth = 1;
[rectangle2Path stroke];
}

或者如果你想在边框和按钮贝塞尔曲线路径之间有 space,那么你应该添加两条贝塞尔曲线路径。一个用于按钮,另一个用于边框。

- (void)drawRect: (CGRect)frame
{

    UIBezierPath* rectanglePath = [UIBezierPath bezierPathWithRoundedRect: CGRectMake(CGRectGetMinX(frame), CGRectGetMinY(frame), floor((CGRectGetWidth(frame)) * 1.00000 + 0.5), floor((CGRectGetHeight(frame)) * 1.00000 + 0.5)) byRoundingCorners: UIRectCornerTopRight cornerRadii: CGSizeMake(28, 28)];
    [rectanglePath closePath];
    [UIColor.redColor setStroke];
    rectanglePath.lineWidth = 1;
    [rectanglePath stroke];


    UIBezierPath* rectangle2Path = [UIBezierPath bezierPathWithRoundedRect: CGRectMake(CGRectGetMinX(frame) + 7, CGRectGetMinY(frame) + 8, 103, 62) byRoundingCorners: UIRectCornerTopRight cornerRadii: CGSizeMake(26, 26)];
    [rectangle2Path closePath];
    [UIColor.grayColor setFill];
    [rectangle2Path fill];
}