在多边形周围绘制边框

时间:2016-07-25 13:01:56

标签: ios objective-c uibezierpath cashapelayer

    -(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;
    }
}

enter image description here

我希望画一个被这两个按钮包围的边框。我用CAShapeLayer和UIBezierPath尝试了很多次,但是失败了,可能是我错过了一些东西。他们中的一些使用UIView解决了这个问题,但我不想这样。我只想通过使用CAShapeLayer和/或UIBezierPath解决问题。

这是我的代码......这是我的错?一开始我设置边框,然后我试着设置角落。只有少数时间可能存在或不存在边框颜色。

2 个答案:

答案 0 :(得分:1)

如果您只需要在按钮周围设置边框,请在按钮bezier路径中添加描边。

enter image description here

- (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];
}

或者如果要在边框和按钮贝塞尔曲线路径之间留出空格,则应添加两个贝塞尔曲线路径。一个用于按钮,另一个用于边框。

enter image description here

- (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];
}

答案 1 :(得分:0)

在您的自定义按钮类中设置:

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