iOS应用中的形状

时间:2017-11-23 04:41:30

标签: ios swift uibezierpath cashapelayer

当我增加视图大小时,我正在UIView上形成锯齿形状。

enter image description here

enter image description here 我正在使用此代码

    func zigZagShape() {
        let width = self.frame.size.width
        let height = self.frame.size.height
        let givenFrame = self.frame

        let zigZagWidth = CGFloat(6)
        let zigZagHeight = CGFloat(4)

        var yInitial = height-zigZagHeight
        let zigZagPath = UIBezierPath(rect: givenFrame)
        zigZagPath.move(to: CGPoint(x:0, y:0))
        zigZagPath.addLine(to: CGPoint(x:0, y:yInitial))

        var slope = -1
        var x = CGFloat(0)
        var i = 0
        while x < width {
            x = zigZagWidth * CGFloat(i)
            let p = zigZagHeight * CGFloat(slope)
            let y = yInitial + p
            let point = CGPoint(x: x, y: y)
            zigZagPath.addLine(to: point)
            slope = slope*(-1)
            i += 1
        }

        zigZagPath.addLine(to: CGPoint(x:width,y: 0))
        yInitial = 0 + zigZagHeight
        x = CGFloat(width)
        i = 0
        while x > 0 {
            x = width - (zigZagWidth * CGFloat(i))
            let p = zigZagHeight * CGFloat(slope)
            let y = yInitial + p
            let point = CGPoint(x: x, y: y)
            zigZagPath.addLine(to: point)
            slope = slope*(-1)
            i += 1
        }

        let shapeLayer = CAShapeLayer()
        shapeLayer.path = zigZagPath.cgPath
        self.layer.mask = shapeLayer
    }

1 个答案:

答案 0 :(得分:1)

当您使用UIBezierPath初始化框架时,我已经更正了代码。还

@IBDesignable
 class ZigZiagView: UIView {

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

         zigZagShape()
    }

    func zigZagShape() {

        let width = self.frame.size.width
        let height = self.frame.size.height
        //let givenFrame = self.frame

        let zigZagWidth = CGFloat(6)
        let zigZagHeight = CGFloat(4)

        var yInitial = height-zigZagHeight
        let zigZagPath = UIBezierPath()
        zigZagPath.move(to: CGPoint(x:0, y:0))
        zigZagPath.addLine(to: CGPoint(x:0, y:yInitial))

        var slope = -1
        var x = CGFloat(0)
        var i = 0
        while x < width {
            x = zigZagWidth * CGFloat(i)
            let p = zigZagHeight * CGFloat(slope)
            let y = yInitial + p
            let point = CGPoint(x: x, y: y)
            zigZagPath.addLine(to: point)
            slope = slope*(-1)
            i += 1
        }

        zigZagPath.addLine(to: CGPoint(x:width,y: 0))

       // draw the line from top right to Bottom 
        zigZagPath.addLine(to: CGPoint(x:width,y:height))

        yInitial = 0 + zigZagHeight
        x = CGFloat(width)
        i = 0
        while x > 0 {
            x = width - (zigZagWidth * CGFloat(i))
            let p = zigZagHeight * CGFloat(slope)
            let y = yInitial + p
            let point = CGPoint(x: x, y: y)
            zigZagPath.addLine(to: point)
            slope = slope*(-1)
            i += 1
        }

     // Now Close the path 
        zigZagPath.close()

        let shapeLayer = CAShapeLayer()
        shapeLayer.path = zigZagPath.cgPath
        self.layer.mask = shapeLayer
    }

}

enter image description here

enter image description here

试试这个,让我知道这是否有效?