如何在swift ios中弯曲UIImageview的边?

如何在swift ios中弯曲UIImageview的边?,swift,Swift,我曾经 这将圆角我希望圆角边缘尝试在UIView中包裹图像 let view = UIImageView(CGRect(x: 0, y: 10, width: 100, height: 100)) view.cornerRadius = 10 self.mainView.addSubview(view) Swift 4 let image = UIImageView(CGRect(x:0,y:0,width:100,height:100)) let view = UIView(CGRect

我曾经


这将圆角我希望圆角边缘

尝试在UIView中包裹图像

let view = UIImageView(CGRect(x: 0, y: 10, width: 100, height: 100))
view.cornerRadius = 10
self.mainView.addSubview(view)


Swift 4

let image = UIImageView(CGRect(x:0,y:0,width:100,height:100))
let view = UIView(CGRect(x:0,y:10,width:100,height:100))
view.cornerRadius = 10
view.addSubiew(image)
self.mainView.addSubview(view)

标准技术是

  • 为形状定义一个
    UIBezierPath
  • 使用该路径制作一个
    CAShapeLayer
  • 定义图像视图层的遮罩以使用该形状层
  • 例如

    收益率:

    对于图像视图的尺寸,您必须使用
    cornerRadius
    lineWidth
    的值,但希望这能说明这一点。我在上面代码中使用的默认值是300×300图像视图


    注意,我在
    layoutSubviews
    中实现了路径,以便它能够响应图像视图的大小调整。我还将它设置为可设计的@IBDesignable,这样,如果您碰巧使用了故事板,您就可以看到它在IB中呈现。

    我认为您可以使用UIBezierPath来绘制这种复杂的UI。
    let image = UIImageView(frame: CGRect(x:0,y:0,width:100,height:100))
    let view = UIView(frame: CGRect(x:0,y:10,width:100,height:100))
    view.layer.cornerRadius = 30
    view.addSubview(image)
    self.mainView.addSubview(view)
    
    @IBDesignable
    class RoundedCornerView: UIImageView {
        @IBInspectable
        var cornerRadius: CGFloat = 17 { didSet { setNeedsLayout() } }
    
        @IBInspectable
        var lineWidth: CGFloat = 75 { didSet { setNeedsLayout() } }
        
        override func layoutSubviews() {
            super.layoutSubviews()
            
            let rect = bounds.insetBy(dx: lineWidth / 2, dy: lineWidth / 2)
    
            let path = UIBezierPath()
            
            var point = CGPoint(x: rect.minX + cornerRadius, y: rect.minY + cornerRadius)
            path.move(to: point)
            
            var controlPoint = CGPoint(x: point.x + cornerRadius, y: rect.minY)
            point = CGPoint(x: rect.midX, y: rect.minY)
            path.addQuadCurve(to: point, controlPoint: controlPoint)
            
            point = CGPoint(x: rect.maxX - cornerRadius, y: rect.minY + cornerRadius)
            controlPoint = CGPoint(x: point.x - cornerRadius, y: rect.minY)
            path.addQuadCurve(to: point, controlPoint: controlPoint)
            
            controlPoint = CGPoint(x: rect.maxX, y: point.y + cornerRadius)
            point = CGPoint(x: rect.maxX, y: rect.midY)
            path.addQuadCurve(to: point, controlPoint: controlPoint)
            
            point = CGPoint(x: rect.maxX - cornerRadius, y: rect.maxY - cornerRadius)
            controlPoint = CGPoint(x: rect.maxX, y: point.y - cornerRadius)
            path.addQuadCurve(to: point, controlPoint: controlPoint)
            
            controlPoint = CGPoint(x: point.x - cornerRadius, y: rect.maxY)
            point = CGPoint(x: rect.midX, y: rect.maxY)
            path.addQuadCurve(to: point, controlPoint: controlPoint)
            
            point = CGPoint(x: rect.minX + cornerRadius, y: rect.maxY - cornerRadius)
            controlPoint = CGPoint(x: point.x + cornerRadius, y: rect.maxY)
            path.addQuadCurve(to: point, controlPoint: controlPoint)
            
            controlPoint = CGPoint(x: rect.minX, y: point.y - cornerRadius)
            point = CGPoint(x: rect.minX, y: rect.midY)
            path.addQuadCurve(to: point, controlPoint: controlPoint)
            
            point = CGPoint(x: rect.minX + cornerRadius, y: rect.minY + cornerRadius)
            controlPoint = CGPoint(x: rect.minX, y: point.y + cornerRadius)
            path.addQuadCurve(to: point, controlPoint: controlPoint)
            
            path.close()
            
            let shapeLayer = CAShapeLayer()
            shapeLayer.lineWidth = lineWidth
            shapeLayer.path = path.cgPath
            shapeLayer.fillColor = UIColor.white.cgColor
            shapeLayer.strokeColor = UIColor.white.cgColor
            layer.mask = shapeLayer
            clipsToBounds = true
        }
    }