Ios 如何用UIBezierPath绘制之字形线?

Ios 如何用UIBezierPath绘制之字形线?,ios,objective-c,uikit,drawing,Ios,Objective C,Uikit,Drawing,我有两个已知的CG点,我想在这两个点之间画一条锯齿状的之字形线。我知道点之间的距离,以及大约要绘制多少条线,这是基于距离动态设置的 任何指导都将不胜感激 下面是我最近用swift编写的代码示例,以获得这种效果。此示例将视图作为输入,并对其应用锯齿效果。您可以参考代码为两点创建效果 func applyZigZagEffect(givenView: UIView) { let width = givenView.frame.size.width let height = given

我有两个已知的CG点,我想在这两个点之间画一条锯齿状的之字形线。我知道点之间的距离,以及大约要绘制多少条线,这是基于距离动态设置的


任何指导都将不胜感激

下面是我最近用swift编写的代码示例,以获得这种效果。此示例将视图作为输入,并对其应用锯齿效果。您可以参考代码为两点创建效果

func applyZigZagEffect(givenView: UIView) {
    let width = givenView.frame.size.width
    let height = givenView.frame.size.height

    let givenFrame = givenView.frame
    let zigZagWidth = CGFloat(7)
    let zigZagHeight = CGFloat(5)
    let yInitial = height-zigZagHeight

    var zigZagPath = UIBezierPath()
    zigZagPath.moveToPoint(CGPointMake(0, 0))
    zigZagPath.addLineToPoint(CGPointMake(0, 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 = CGPointMake(x, y)
        zigZagPath.addLineToPoint(point)
        slope = slope*(-1)
        i++
    }
    zigZagPath.addLineToPoint(CGPointMake(width, 0))

    var shapeLayer = CAShapeLayer()
    shapeLayer.path = zigZagPath.CGPath
    givenView.layer.mask = shapeLayer
}
func applyzigzagfeact(给定视图:UIView){
let width=givenView.frame.size.width
let height=给定的视图.框架.尺寸.高度
设givenFrame=givenView.frame
让之字形宽度=CGFloat(7)
让之字形高度=CGFloat(5)
设yInitial=高度之字形高度
var zigZagPath=UIBezierPath()
移动点(CGPointMake(0,0))
zigZagPath.addLineToPoint(CGPointMake(0,yInitial))
变量斜率=-1
var x=CGFloat(0)
变量i=0
而x

您可以调整“之字形宽度”和“之字形高度”以获得您选择的效果。

这将在视图的顶部创建“之字形线条”。可以通过锯齿线传递所需的边数

public extension UIBezierPath  {
func zigZagTop(_ rect: CGRect) -> UIBezierPath {
    let edges = 10
    let cornerWidth = rect.size.width / CGFloat(edges)
    let cornerHeight = cornerWidth/2
    for i in 0...edges {
        let newHeight = (i % 2) == 0 ? cornerHeight : 0
        if i == 0 {
            move(to: CGPoint(x:rect.size.width, y:newHeight))
        } else {
        addLine(to: CGPoint(x: rect.size.width - cornerWidth * CGFloat(i) , y: newHeight))
        }
    }
    addLine(to: CGPoint(x: 0, y:rect.size.height))
    addLine(to: CGPoint(x: rect.size.width, y:rect.size.height))
    close()
    return self
}
}