【问题标题】:How to set Corner Radius to UIBezierPath如何将角半径设置为 UIBezierPath
【发布时间】:2018-05-26 09:20:38
【问题描述】:

我使用此代码由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()

现在我想使用 Slider 为以下图像的 TopLeftTopRight 提供角半径。

我尝试了以下代码,但它对我不起作用。

        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

我也尝试将圆角半径应用于图像视图,但它不起作用。我想要如下图的圆角半径。

请帮忙! .

.

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

【问题讨论】:

  • 您是否将视图剪辑设置为绑定为真? self.imgTop.clipsToBounds = true
  • @IraniyaNaynesh 它不起作用

标签: ios swift uibezierpath


【解决方案1】:

在 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()

PS:不要设置所有角落,而是设置你想要的角落

【讨论】:

  • 您好,感谢您的努力。你能把你的项目发给我吗?
  • 项目中没有任何内容,只有一个我已经发布的文件
  • 我已经使用了您的代码,它与视图完美配合,但我想对图像执行此操作,我尝试添加图像但它不起作用。你能帮帮我吗?
  • 我不知道你可以添加图片路径,但可以添加到 imageView
  • 为什么你不能只做 yourImageView.layer.cornerRadius = 30 ?你不需要为此创建路径
【解决方案2】:

IOS 14, swift 5 版本

let bezierPath = UIBezierPath(roundedRect: shareContainerView.bounds, byRoundingCorners: [.topLeft, .topRight], cornerRadii: CGSize(width: 4, height: 4))
let maskLayer = CAShapeLayer()
maskLayer.path = bezierPath.cgPath
shareContainerView.layer.mask = maskLayer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多