Skip to content

Instantly share code, notes, and snippets.

@khorbushko
Created June 10, 2019 08:42
Show Gist options
  • Select an option

  • Save khorbushko/8088a7ba7b8f00c78eae787c81ba52b9 to your computer and use it in GitHub Desktop.

Select an option

Save khorbushko/8088a7ba7b8f00c78eae787c81ba52b9 to your computer and use it in GitHub Desktop.
UIBezierPath + Icon
import UIKit
extension UIBezierPath {
// MARK: - UIBezierPath + Icon
class func checkMark(_ frame: CGRect) -> UIBezierPath {
let origin = frame.origin
let diameter = frame.height
let point1 = CGPoint(x: origin.x + diameter * 0.25, y: origin.y + diameter * 0.5)
let point2 = CGPoint(x: origin.x + diameter * 0.44, y: origin.y + diameter * 0.67)
let point3 = CGPoint(x: origin.x + diameter * 0.8, y: origin.y + diameter * 0.3)
let checkMarkBezierPath = UIBezierPath()
checkMarkBezierPath.move(to: point1)
checkMarkBezierPath.addLine(to: point2)
checkMarkBezierPath.addLine(to: point3)
checkMarkBezierPath.lineJoinStyle = .round
checkMarkBezierPath.lineCapStyle = .round
return checkMarkBezierPath
}
class func crossMark(_ frame: CGRect) -> UIBezierPath {
let origin = frame.origin
let diameter = frame.height
let startPointForFirstLine = CGPoint(x: origin.x + diameter * 0.25, y: origin.y + diameter * 0.25)
let endPointForFirstLine = CGPoint(x: origin.x + diameter * 0.75, y: origin.y + diameter * 0.75)
let startPointForSecondLine = CGPoint(x: origin.x + diameter * 0.75, y: origin.y + diameter * 0.25)
let endPointForSecondLine = CGPoint(x: origin.x + diameter * 0.25, y: origin.y + diameter * 0.75)
let checkMarkBezierPath = UIBezierPath()
checkMarkBezierPath.move(to: startPointForFirstLine)
checkMarkBezierPath.addLine(to: endPointForFirstLine)
checkMarkBezierPath.move(to: endPointForSecondLine)
checkMarkBezierPath.addLine(to: startPointForSecondLine)
checkMarkBezierPath.lineJoinStyle = .round
checkMarkBezierPath.lineCapStyle = .round
return checkMarkBezierPath
}
class func plusMark(_ frame: CGRect) -> UIBezierPath {
let path = crossMark(frame)
path.rotatePath(degree: 45)
return path
}
class func questionMark(_ frame: CGRect) -> UIBezierPath {
let bezierPath = UIBezierPath()
bezierPath.move(to: CGPoint(x: frame.minX + 0.27540 * frame.width, y: frame.minY + 0.36463 * frame.height))
bezierPath.addCurve(to: CGPoint(x: frame.minX + 0.28679 * frame.width, y: frame.minY + 0.25366 * frame.height),
controlPoint1: CGPoint(x: frame.minX + 0.27264 * frame.width, y: frame.minY + 0.32398 * frame.height),
controlPoint2: CGPoint(x: frame.minX + 0.27644 * frame.width, y: frame.minY + 0.28699 * frame.height))
bezierPath.addCurve(to: CGPoint(x: frame.minX + 0.33285 * frame.width, y: frame.minY + 0.16768 * frame.height),
controlPoint1: CGPoint(x: frame.minX + 0.29714 * frame.width, y: frame.minY + 0.22033 * frame.height),
controlPoint2: CGPoint(x: frame.minX + 0.31249 * frame.width, y: frame.minY + 0.19167 * frame.height))
bezierPath.addCurve(to: CGPoint(x: frame.minX + 0.40581 * frame.width, y: frame.minY + 0.11220 * frame.height),
controlPoint1: CGPoint(x: frame.minX + 0.35320 * frame.width, y: frame.minY + 0.14370 * frame.height),
controlPoint2: CGPoint(x: frame.minX + 0.37752 * frame.width, y: frame.minY + 0.12520 * frame.height))
bezierPath.addCurve(to: CGPoint(x: frame.minX + 0.49897 * frame.width, y: frame.minY + 0.09268 * frame.height),
controlPoint1: CGPoint(x: frame.minX + 0.43410 * frame.width, y: frame.minY + 0.09919 * frame.height),
controlPoint2: CGPoint(x: frame.minX + 0.46516 * frame.width, y: frame.minY + 0.09268 * frame.height))
bezierPath.addCurve(to: CGPoint(x: frame.minX + 0.59367 * frame.width, y: frame.minY + 0.10915 * frame.height),
controlPoint1: CGPoint(x: frame.minX + 0.53416 * frame.width, y: frame.minY + 0.09268 * frame.height),
controlPoint2: CGPoint(x: frame.minX + 0.56572 * frame.width, y: frame.minY + 0.09817 * frame.height))
bezierPath.addCurve(to: CGPoint(x: frame.minX + 0.66457 * frame.width, y: frame.minY + 0.15549 * frame.height),
controlPoint1: CGPoint(x: frame.minX + 0.62162 * frame.width, y: frame.minY + 0.12012 * frame.height),
controlPoint2: CGPoint(x: frame.minX + 0.64525 * frame.width, y: frame.minY + 0.13557 * frame.height))
bezierPath.addCurve(to: CGPoint(x: frame.minX + 0.70907 * frame.width, y: frame.minY + 0.22805 * frame.height),
controlPoint1: CGPoint(x: frame.minX + 0.68389 * frame.width, y: frame.minY + 0.17541 * frame.height),
controlPoint2: CGPoint(x: frame.minX + 0.69872 * frame.width, y: frame.minY + 0.19959 * frame.height))
bezierPath.addCurve(to: CGPoint(x: frame.minX + 0.72460 * frame.width, y: frame.minY + 0.32195 * frame.height),
controlPoint1: CGPoint(x: frame.minX + 0.71942 * frame.width, y: frame.minY + 0.25650 * frame.height),
controlPoint2: CGPoint(x: frame.minX + 0.72460 * frame.width, y: frame.minY + 0.28780 * frame.height))
bezierPath.addCurve(to: CGPoint(x: frame.minX + 0.70442 * frame.width, y: frame.minY + 0.41402 * frame.height),
controlPoint1: CGPoint(x: frame.minX + 0.72460 * frame.width, y: frame.minY + 0.35772 * frame.height),
controlPoint2: CGPoint(x: frame.minX + 0.71787 * frame.width, y: frame.minY + 0.38841 * frame.height))
bezierPath.addCurve(to: CGPoint(x: frame.minX + 0.65525 * frame.width, y: frame.minY + 0.48537 * frame.height),
controlPoint1: CGPoint(x: frame.minX + 0.69096 * frame.width, y: frame.minY + 0.43963 * frame.height),
controlPoint2: CGPoint(x: frame.minX + 0.67457 * frame.width, y: frame.minY + 0.46341 * frame.height))
bezierPath.addCurve(to: CGPoint(x: frame.minX + 0.59522 * frame.width, y: frame.minY + 0.55183 * frame.height),
controlPoint1: CGPoint(x: frame.minX + 0.63593 * frame.width, y: frame.minY + 0.50732 * frame.height),
controlPoint2: CGPoint(x: frame.minX + 0.61592 * frame.width, y: frame.minY + 0.52947 * frame.height))
bezierPath.addCurve(to: CGPoint(x: frame.minX + 0.50272 * frame.width, y: frame.minY + 0.68598 * frame.height),
controlPoint1: CGPoint(x: frame.minX + 0.57452 * frame.width, y: frame.minY + 0.57419 * frame.height),
controlPoint2: CGPoint(x: frame.minX + 0.51060 * frame.width, y: frame.minY + 0.65945 * frame.height))
bezierPath.addCurve(to: CGPoint(x: frame.minX + 0.49741 * frame.width, y: frame.minY + 0.75000 * frame.height),
controlPoint1: CGPoint(x: frame.minX + 0.49728 * frame.width, y: frame.minY + 0.70427 * frame.height),
controlPoint2: CGPoint(x: frame.minX + 0.49798 * frame.width, y: frame.minY + 0.73955 * frame.height))
bezierPath.move(to: CGPoint(x: frame.minX + 0.51902 * frame.width, y: frame.minY + 0.91768 * frame.height))
bezierPath.addCurve(to: CGPoint(x: frame.minX + 0.49728 * frame.width, y: frame.minY + 0.94207 * frame.height),
controlPoint1: CGPoint(x: frame.minX + 0.51902 * frame.width, y: frame.minY + 0.93115 * frame.height),
controlPoint2: CGPoint(x: frame.minX + 0.50929 * frame.width, y: frame.minY + 0.94207 * frame.height))
bezierPath.addCurve(to: CGPoint(x: frame.minX + 0.47554 * frame.width, y: frame.minY + 0.91768 * frame.height),
controlPoint1: CGPoint(x: frame.minX + 0.48528 * frame.width, y: frame.minY + 0.94207 * frame.height),
controlPoint2: CGPoint(x: frame.minX + 0.47554 * frame.width, y: frame.minY + 0.93115 * frame.height))
bezierPath.addCurve(to: CGPoint(x: frame.minX + 0.49728 * frame.width, y: frame.minY + 0.89329 * frame.height),
controlPoint1: CGPoint(x: frame.minX + 0.47554 * frame.width, y: frame.minY + 0.90421 * frame.height),
controlPoint2: CGPoint(x: frame.minX + 0.48528 * frame.width, y: frame.minY + 0.89329 * frame.height))
bezierPath.addCurve(to: CGPoint(x: frame.minX + 0.51902 * frame.width, y: frame.minY + 0.91768 * frame.height),
controlPoint1: CGPoint(x: frame.minX + 0.50929 * frame.width, y: frame.minY + 0.89329 * frame.height),
controlPoint2: CGPoint(x: frame.minX + 0.51902 * frame.width, y: frame.minY + 0.90421 * frame.height))
bezierPath.lineJoinStyle = .round
bezierPath.lineCapStyle = .round
return bezierPath
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment