微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在UIView

如何解决在UIView

我需要在UIView的顶部和底部创建一条曲线,我在底部使用以下内容

 func pathCurvedForView(givenView: UIView,curvedPercent:CGFloat) ->UIBezierPath
        {
            let arrowPath = UIBezierPath()
            arrowPath.move(to: CGPoint(x:0,y:0))
            arrowPath.addLine(to: CGPoint(x:givenView.bounds.size.width,y:givenView.bounds.size.height))
            arrowPath.addQuadCurve(to: CGPoint(x:0,y:givenView.bounds.size.height),controlPoint: CGPoint(x:givenView.bounds.size.width/2,y:givenView.bounds.size.height-givenView.bounds.size.height*curvedPercent))
            arrowPath.addLine(to: CGPoint(x:0,y:0))
            arrowPath.close()
            
            return arrowPath
        }

    func applyCurvedpath(givenView: UIView,curvedPercent:CGFloat) {
        guard curvedPercent <= 1 && curvedPercent >= 0 else{
            return
        }
        
        let shapeLayer = CAShapeLayer(layer: givenView.layer)
        shapeLayer.path = self.pathCurvedForView(givenView: givenView,curvedPercent: curvedPercent).cgPath
        shapeLayer.frame = givenView.bounds
        shapeLayer.masksToBounds = true
        givenView.layer.mask = shapeLayer
    }

它工作正常,但是只对视图的底部起作用,对如何为topView实现它有任何想法吗? 谢谢

enter image description here

解决方法

让我们解释一下效果:

A             B
 + -------- +
 |          |
 |          |
 + -------- +
D            C

我们想要

  • 从A(0,0)开始:move(to:)
  • 弯曲到B(宽度,0):addQuadCurve(to:controlPoint:)
  • 直到C(宽度,高度):addLine(to:)
  • 弯曲至D(0,高度):addQuadCurve(to:controlPoint:)
  • 直达A(0,0):addLine(to:)
  • 关闭。

所以替换

arrowPath.addLine(to: CGPoint(x:givenView.bounds.size.width,y:0))

使用

arrowPath.addQuadCurve(to: CGPoint(x: givenView.bounds.size.width,y: 0),controlPoint: CGPoint(x: givenView.bounds.size.width/2,y: givenView.bounds.size.height*curvedPercent))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。