我需要在视图底部绘制一个带有UIBezierPath的视图,就像这张图片一样。
ios - uiimageview底部的Curv View-LMLPHP

我尝试使用此代码,但是在图像的一半处绘制了椭圆形,而不是在图片的底部
这是我的输出和代码

override func draw(_ rect: CGRect) {
    super.draw(rect)

    let shapeLayer = CAShapeLayer(layer: imgCamera.layer)
    shapeLayer.path = self.pathCurvedForView(givenView: imgCamera).cgPath
    shapeLayer.frame = imgCamera.bounds
    shapeLayer.masksToBounds = true
    imgCamera.layer.mask = shapeLayer

}

private func pathCurvedForView(givenView: UIView) ->UIBezierPath
{
    let ovalRect = givenView.frame

    let ovalPath = UIBezierPath()

    ovalPath.addArc(withCenter: CGPoint(x: ovalRect.midX, y: ovalRect.midY), radius: ovalRect.width / 2, startAngle: 0 * CGFloat.pi/180, endAngle: -180 * CGFloat.pi/180, clockwise: true)
    ovalPath.addLine(to: CGPoint(x: ovalRect.midX, y: ovalRect.midY))

    ovalPath.close()

    UIColor.gray.setFill()
    ovalPath.fill()

    return ovalPath
}

ios - uiimageview底部的Curv View-LMLPHP

最佳答案

代码工作:

    imageView.layer.cornerRadius = imageView.frame.width/2
    imageView.layer.borderWidth = 5
    imageView.layer.borderColor = UIColor.white.cgColor
    let gradientLayer = CAGradientLayer()
    gradientLayer.frame = imageView.bounds
    gradientLayer.colors = [UIColor.clear.cgColor, UIColor.clear.cgColor, UIColor.clear.cgColor, lightBlack.cgColor , lightBlack.cgColor]
    gradientLayer.locations = [NSNumber(value: 0.0), NSNumber(value: 0.5), NSNumber(value: 0.75),NSNumber(value: 0.75), NSNumber(value: 1.0)]
    imageView.layer.addSublayer(gradientLayer)

输出:

ios - uiimageview底部的Curv View-LMLPHP

10-08 07:32
查看更多