Created
November 26, 2018 09:25
-
-
Save mbuchetics/e56a7ef7a2551af5089aa30ee246a976 to your computer and use it in GitHub Desktop.
Revisions
-
mbuchetics created this gist
Nov 26, 2018 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,44 @@ import Foundation import CoreGraphics import UIKit extension UIBezierPath { convenience init?(quadCurve points: [CGPoint]) { guard points.count > 1 else { return nil } self.init() var p1 = points[0] move(to: p1) if points.count == 2 { addLine(to: points[1]) } for i in 0..<points.count { let mid = midPoint(p1: p1, p2: points[i]) addQuadCurve(to: mid, controlPoint: controlPoint(p1: mid, p2: p1)) addQuadCurve(to: points[i], controlPoint: controlPoint(p1: mid, p2: points[i])) p1 = points[i] } } private func midPoint(p1: CGPoint, p2: CGPoint) -> CGPoint { return CGPoint(x: (p1.x + p2.x) / 2, y: (p1.y + p2.y) / 2) } private func controlPoint(p1: CGPoint, p2: CGPoint) -> CGPoint { var controlPoint = midPoint(p1: p1, p2: p2) let diffY = abs(p2.y - controlPoint.y) if p1.y < p2.y { controlPoint.y += diffY } else if p1.y > p2.y { controlPoint.y -= diffY } return controlPoint } }