Drawing Smooth Curves - Methods Needed

前端 未结 12 2258
长情又很酷
长情又很酷 2020-11-28 17:13

How do you smooth a set of points in an iOS drawing app WHILE MOVING? I have tried UIBezierpaths but all I get are jagged ends where they intersect, when I just shift the po

12条回答
  •  半阙折子戏
    2020-11-28 18:02

    Here is the code in Swift 4/5

    func quadCurvedPathWithPoint(points: [CGPoint] ) -> UIBezierPath {
        let path = UIBezierPath()
        if points.count > 1 {
            var prevPoint:CGPoint?
            for (index, point) in points.enumerated() {
                if index == 0 {
                    path.move(to: point)
                } else {
                    if index == 1 {
                        path.addLine(to: point)
                    }
                    if prevPoint != nil {
                        let midPoint = self.midPointForPoints(from: prevPoint!, to: point)
                        path.addQuadCurve(to: midPoint, controlPoint: controlPointForPoints(from: midPoint, to: prevPoint!))
                        path.addQuadCurve(to: point, controlPoint: controlPointForPoints(from: midPoint, to: point))
                    }
                }
                prevPoint = point
            }
        }
        return path
    }
    
    func midPointForPoints(from p1:CGPoint, to p2: CGPoint) -> CGPoint {
        return CGPoint(x: (p1.x + p2.x) / 2, y: (p1.y + p2.y) / 2)
    }
    
    func controlPointForPoints(from p1:CGPoint,to p2:CGPoint) -> CGPoint {
        var controlPoint = midPointForPoints(from:p1, to: p2)
        let  diffY = abs(p2.y - controlPoint.y)
        if p1.y < p2.y {
            controlPoint.y = controlPoint.y + diffY
        } else if ( p1.y > p2.y ) {
            controlPoint.y = controlPoint.y - diffY
        }
        return controlPoint
    }
    

提交回复
热议问题