swift 4.0 UIGraphics绘制泡泡图

这里写图片描述

    func setBackgroundImageView(_ rect: CGRect) -> () {
        let width:CGFloat = rect.size.width
        let height:CGFloat = rect.size.height
        let radius:CGFloat = 3.0
        let margin:CGFloat = 8.0
        let rightMargin:CGFloat = 30
        let angleBottomWidth:CGFloat = 8.0
        let lineWidth:CGFloat = 0.5

        let ref = UIGraphicsGetCurrentContext()

        let path = UIBezierPath.init()
        //起始点
        path.move(to: CGPoint(x: radius, y: margin))
        //顶部三角
        path.addLine(to: CGPoint(x: width - rightMargin - angleBottomWidth, y: margin))
        path.addLine(to: CGPoint(x: width - rightMargin - angleBottomWidth / 2, y: 0))
        path.addLine(to: CGPoint(x: width - rightMargin, y: margin))
        //右上角圆弧
        path.addArc(withCenter: CGPoint(x: width - radius, y: margin + radius), radius: radius, startAngle: -CGFloat(Double.pi / 2), endAngle: 0.0, clockwise: true)
        //右下角圆弧
        path.addLine(to: CGPoint(x: width - lineWidth / 2, y: height - radius))
        path.addArc(withCenter: CGPoint(x: width - radius, y: height - radius), radius: radius, startAngle: 0.0, endAngle: CGFloat(Double.pi / 2), clockwise: true)
        //左下角圆弧
        path.addLine(to: CGPoint(x: width - radius, y: height - lineWidth / 2))
        path.addArc(withCenter: CGPoint(x: radius, y: height - radius), radius: radius, startAngle: CGFloat(Double.pi / 2), endAngle: CGFloat(Double.pi), clockwise: true)
        //左上角圆弧
        path.addLine(to: CGPoint(x: lineWidth / 2, y: margin + radius))
        path.addArc(withCenter: CGPoint(x: radius, y: margin + radius), radius: radius, startAngle: CGFloat(Double.pi), endAngle: CGFloat(Double.pi * 1.5), clockwise: true)
        //闭合
        path.addLine(to: CGPoint(x: radius, y: margin))

        //设置线宽
        ref?.setLineWidth(lineWidth)

        //路径添加到上下文
        ref?.closePath()
        ref?.addPath(path.cgPath)

        //设置样式
        UIColor.red.setStroke()//边框
        UIColor.white.setFill()//填充样式

        //渲染
        ref?.drawPath(using: .fillStroke)
    }

猜你喜欢

转载自blog.csdn.net/kuangdacaikuang/article/details/80601330