Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 将“拐角半径”设置为负值以实现凹面拐角_Swift_Calayer - Fatal编程技术网

Swift 将“拐角半径”设置为负值以实现凹面拐角

Swift 将“拐角半径”设置为负值以实现凹面拐角,swift,calayer,Swift,Calayer,我使用此代码来绕过UIView的各个角落: 然后我使用view.roundCorners[.topLeft,.topRight],radius:view.frame.width/3 现在,这将圆角变成凸的,我想要相反的结果。这意味着顶角将保持在相同的点上,但它们之间的线是朝视图内部圆角的。 我试图通过使用负值调用上述函数来实现这一点,但结果是什么都没有发生 我加了一张照片,这是我的目标。 我怎样才能做到这一点? 您需要创建自己的UIBezierPath。对于凹面端,添加quadcurveTo:c

我使用此代码来绕过UIView的各个角落:

然后我使用view.roundCorners[.topLeft,.topRight],radius:view.frame.width/3

现在,这将圆角变成凸的,我想要相反的结果。这意味着顶角将保持在相同的点上,但它们之间的线是朝视图内部圆角的。 我试图通过使用负值调用上述函数来实现这一点,但结果是什么都没有发生

我加了一张照片,这是我的目标。 我怎样才能做到这一点?
您需要创建自己的UIBezierPath。对于凹面端,添加quadcurveTo:controlPoint:很方便

这里我使用参数“深度”来控制曲线的数量:

extension UIView {

    func concaveEnds(depth: CGFloat) {
        let width = self.bounds.width
        let height = self.bounds.height

        let path = UIBezierPath()
        path.move(to: CGPoint.zero)
        path.addLine(to: CGPoint(x: width, y: 0))
        path.addQuadCurve(to: CGPoint(x: width, y: height), controlPoint: CGPoint(x: width - height * depth, y: height / 2))
        path.addLine(to: CGPoint(x: 0, y: height))
        path.addQuadCurve(to: CGPoint.zero, controlPoint: CGPoint(x: height * depth, y: height / 2))
        let mask = CAShapeLayer()
        mask.path = path.cgPath
        self.layer.mask = mask
        self.layer.masksToBounds = false
    }
}
操场演示:

let view = UIView(frame: CGRect(x: 0, y: 0, width: 400, height: 100))
view.backgroundColor = .red

view.concaveEnds(depth: 0.4)

您需要创建自己的UIBezierPath。对于凹面端,添加quadcurveTo:controlPoint:很方便

这里我使用参数“深度”来控制曲线的数量:

extension UIView {

    func concaveEnds(depth: CGFloat) {
        let width = self.bounds.width
        let height = self.bounds.height

        let path = UIBezierPath()
        path.move(to: CGPoint.zero)
        path.addLine(to: CGPoint(x: width, y: 0))
        path.addQuadCurve(to: CGPoint(x: width, y: height), controlPoint: CGPoint(x: width - height * depth, y: height / 2))
        path.addLine(to: CGPoint(x: 0, y: height))
        path.addQuadCurve(to: CGPoint.zero, controlPoint: CGPoint(x: height * depth, y: height / 2))
        let mask = CAShapeLayer()
        mask.path = path.cgPath
        self.layer.mask = mask
        self.layer.masksToBounds = false
    }
}
操场演示:

let view = UIView(frame: CGRect(x: 0, y: 0, width: 400, height: 100))
view.backgroundColor = .red

view.concaveEnds(depth: 0.4)

惊人的完美答案。谢谢你的努力@vacawama如果我只想从左侧开始呢?@AaoIi,将第一条路径替换为。addQuadCurveto:CGPointx:width,y:height,controlPoint:CGPointx:width-height*depth,y:height/2与path.addLineto:CGPointx:width,y:height@vacawama我怎样才能使凹面朝下?惊人的完美答案。谢谢你的努力@vacawama如果我只想从左侧开始呢?@AaoIi,将第一条路径替换为。addQuadCurveto:CGPointx:width,y:height,controlPoint:CGPointx:width-height*depth,y:height/2与path.addLineto:CGPointx:width,y:height@vacawama如何使凹面朝下?