是否可以创建具有弯曲底部边缘的 UIView。

Posted

技术标签:

【中文标题】是否可以创建具有弯曲底部边缘的 UIView。【英文标题】:Is it possible to create UIView with curved bottom edge. 【发布时间】:2017-11-24 12:26:22 【问题描述】:

我需要创建带有弯曲底边的 UIView,如下所示。最简单的方法是什么?

【问题讨论】:

【参考方案1】:

只需将您在 IB 中的视图设置为 ShapedView 类,或者从代码创建它并在绘制路径时使用控制点。

class ShapedView: UIView 
    let subLayer: CAShapeLayer = 
        let subLayer = CAShapeLayer()
        subLayer.fillColor = UIColor.red.cgColor
        return subLayer
    ()

    override init(frame: CGRect) 
        super.init(frame: frame)
        commonInit()
    

    required init?(coder aDecoder: NSCoder) 
        super.init(coder: aDecoder)
        commonInit()
    

    private func commonInit() 
        layer.addSublayer(subLayer)
        subLayer.frame = bounds
        setPath()
    

    override func layoutSubviews() 
        super.layoutSubviews()
        subLayer.frame = bounds
        setPath()
    

    private func setPath() 
        let path = UIBezierPath()
        path.move(to: CGPoint(x:0, y:bounds.height))
        path.addQuadCurve(to: CGPoint(x:bounds.width, y:bounds.height), controlPoint: CGPoint(x:bounds.width/2, y:4*bounds.height/5))
        path.addLine(to: CGPoint(x:bounds.width, y:0))
        path.addLine(to: CGPoint(x:0, y:0))
        subLayer.path = path.cgPath
    

【讨论】:

【参考方案2】:

您可以使用CAShapeLayer 实现这一目标

关注

1) 创建CAShapeLayer

2) 创建UIBezierPath

3) 将path 分配给CAShapeLayer

4) 将 CAShapeLayer 添加到 maskUIVIew

希望对你有帮助

【讨论】:

以上是关于是否可以创建具有弯曲底部边缘的 UIView。的主要内容,如果未能解决你的问题,请参考以下文章

如何在android中设计具有弯曲边缘的视频视图?

沿 UIView 左边缘显示渐变

为选定的边缘 UIView 添加阴影

是否有可能有一个可变高度的 UIView 蒙版层不拉伸,也许只是坐在顶部? (例如,“撕纸”式边缘?)

带有弯曲边缘的 Android 矩形

如何在swift中剪切uiview的边缘