美文网首页
设置带边框的不同尺寸的圆角

设置带边框的不同尺寸的圆角

作者: 异乡人_4f2a | 来源:发表于2021-01-26 16:27 被阅读0次

    设置如图红色框里面的圆角样式,带边框:

    extension UIView {

        //各圆角大小

        struct CornerRadii {

            vartopLeft:CGFloat=0

            vartopRight:CGFloat=0

            varbottomLeft:CGFloat=0

            varbottomRight:CGFloat=0

        }

        //切圆角函数绘制线条

        func createPathWithRoundedRect( bounds:CGRect,cornerRadii:CornerRadii) ->CGPath{

            let minX = bounds.minX

            let minY = bounds.minY

            let maxX = bounds.maxX

            let maxY = bounds.maxY

            //获取四个圆心

            let topLeftCenterX = minX+  cornerRadii.topLeft

            let topLeftCenterY = minY+cornerRadii.topLeft

            let topRightCenterX = maxX-cornerRadii.topRight

            let topRightCenterY = minY+cornerRadii.topRight

            let bottomLeftCenterX = minX +  cornerRadii.bottomLeft

            let bottomLeftCenterY = maxY - cornerRadii.bottomLeft

            let bottomRightCenterX = maxX-  cornerRadii.bottomRight

            let bottomRightCenterY = maxY-cornerRadii.bottomRight

            //虽然顺时针参数是YES,在iOS中的UIView中,这里实际是逆时针

            let path :CGMutablePath = CGMutablePath();

            //顶 左

            path.addArc(center:CGPoint(x: topLeftCenterX, y: topLeftCenterY), radius: cornerRadii.topLeft, startAngle:CGFloat.pi, endAngle:CGFloat.pi*3/2, clockwise:false)

            //顶右

            path.addArc(center:CGPoint(x: topRightCenterX, y: topRightCenterY), radius: cornerRadii.topRight, startAngle:CGFloat.pi*3/2, endAngle:0, clockwise:false)

            //底右

            path.addArc(center:CGPoint(x: bottomRightCenterX, y: bottomRightCenterY), radius: cornerRadii.bottomRight, startAngle:0, endAngle:CGFloat.pi/2, clockwise:false)

            //底左

            path.addArc(center:CGPoint(x: bottomLeftCenterX, y: bottomLeftCenterY), radius: cornerRadii.bottomLeft, startAngle:CGFloat.pi/2, endAngle:CGFloat.pi, clockwise:false)

            path.closeSubpath();

            returnpath;

        }

        //MARK:添加4个不同尺寸的圆角(可以设置边框)

        func addCorner(cornerRadii:CornerRadii, size:CGSize, borderColor:UIColor, borderWidth:CGFloat) {

            let rect =CGRect(origin:CGPoint(x:0, y:0), size: size)

            let path =createPathWithRoundedRect(bounds: rect, cornerRadii:cornerRadii)

            let shapLayer =CAShapeLayer()

            shapLayer.frame= rect

            shapLayer.path= path

            self.layer.mask= shapLayer

            //设置边框

            let borderLayer =CAShapeLayer()

            borderLayer.path= path

            borderLayer.fillColor=UIColor.clear.cgColor

            borderLayer.strokeColor= borderColor.cgColor

            borderLayer.lineWidth= borderWidth

            borderLayer.frame= rect

            self.layer.addSublayer(borderLayer)

        }

        //MARK:添加4个不同尺寸的圆角(不可以设置边框)

        func addCorner(cornerRadii:CornerRadii, size:CGSize) {

            let rect =CGRect(origin:CGPoint(x:0, y:0), size: size)

            let path =createPathWithRoundedRect(bounds: rect, cornerRadii:cornerRadii)

            let shapLayer =CAShapeLayer()

            shapLayer.frame= rect

            shapLayer.path= path

            self.layer.mask= shapLayer

        }

    }

    相关文章

      网友评论

          本文标题:设置带边框的不同尺寸的圆角

          本文链接:https://www.haomeiwen.com/subject/khggzktx.html