代码之家  ›  专栏  ›  技术社区  ›  Khushbu Desai

如何将角半径设置为uibezierPath

  •  4
  • Khushbu Desai  · 技术社区  · 8 年前

    我创建了以下图片 UIBezierPath 使用此代码

        //// Bezier Drawing
        let bezierPath = UIBezierPath()
        bezierPath.move(to: CGPoint(x: 360, y: 0))
        bezierPath.addCurve(to: CGPoint(x: 360, y: 75), controlPoint1: CGPoint(x: 359.53, y: 30.5), controlPoint2: CGPoint(x: 359.91, y: 55.45))
        bezierPath.addCurve(to: CGPoint(x: 360, y: 153.78), controlPoint1: CGPoint(x: 360.35, y: 153.21), controlPoint2: CGPoint(x: 360, y: 153.78))
        bezierPath.addCurve(to: CGPoint(x: 180, y: 153.78), controlPoint1: CGPoint(x: 360, y: 153.78), controlPoint2: CGPoint(x: 271.2, y: 212.77))
        bezierPath.addCurve(to: CGPoint(x: 0, y: 153.78), controlPoint1: CGPoint(x: 88.8, y: 94.8), controlPoint2: CGPoint(x: 0, y: 153.78))
        bezierPath.addLine(to: CGPoint(x: 0, y: 0))
        bezierPath.addLine(to: CGPoint(x: 360, y: 0))
        UIColor.green.setFill()
        bezierPath.fill()
    

    enter image description here

    现在我想给拐角半径 TopLeft TopRight 在下面的图片中使用滑块。

    我试过遵循代码,但它对我不起作用。

            var cornerPath = path
    
            cornerPath = UIBezierPath(roundedRect:self.imgTop.bounds,
                                              byRoundingCorners:[.topLeft, .topRight],
                                              cornerRadii: CGSize(width: CGFloat(cornerRadius),
                                                                  height: CGFloat(cornerRadius)))
    
            path.lineWidth = 1.0
    
            let maskLayer = CAShapeLayer()
            maskLayer.path = cornerPath.cgPath
            self.imgTop.layer.mask = maskLayer
    

        let maskLayerTop = CAShapeLayer()
        maskLayerTop.fillColor = UIColor.white.cgColor
        maskLayerTop.backgroundColor = UIColor.clear.cgColor
        maskLayerTop.path = pathTop?.cgPath
        maskLayerTop.cornerRadius = CGFloat(cornerRadius)
        //maskLayerTop.masksToBounds = true
    
        maskLayerTop.shadowRadius = CGFloat(cornerRadius)
        maskLayerTop.fillColor = UIColor.green.cgColor
        maskLayerTop.shadowColor = UIColor.blue.cgColor
    
        imgTop.layer.mask = maskLayerTop
    

    我也尝试过将角半径应用到图像视图,但它不起作用。我希望角半径如下图所示。

    enter image description here

    请帮忙! .

    .

    注: 我已经创建了一个路径来创建以下图像

    1 回复  |  直到 8 年前
        1
  •  3
  •   Iraniya Naynesh    8 年前

    在曲线添加的let bezierPath=uibezierPath()之前

    var = cornerRadiudSize = CGSize(width: 50.0, height: 50.0) //this is your global variable that you can change based on the slider and then draw
    let p = UIBezierPath(roundedRect: rect, byRoundingCorners: .allCorners, cornerRadii: cornerRadiudSize)
    p.addClip()
    

    附言:不是所有的角落,而是设置你想要的角落。

    image worth a thousand words