Skip to content

Instantly share code, notes, and snippets.

@erica
Last active August 29, 2015 14:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save erica/da7560c2acb80e7617ad to your computer and use it in GitHub Desktop.
Save erica/da7560c2acb80e7617ad to your computer and use it in GitHub Desktop.
If let tuples in action
var interpolatedPathPoints : [CGPoint] {
let numberOfBezierSamples = 6
var results = [CGPoint]()
var current : BezierElement? = nil
for element in elements {
switch element.elementType.value {
case kCGPathElementMoveToPoint.value:
if let point = element.point {results += [point]; current = element}
break;
case kCGPathElementAddLineToPoint.value:
if let point = element.point {results += [point]; current = element}
break;
case kCGPathElementCloseSubpath.value:
current = nil
break;
case kCGPathElementAddQuadCurveToPoint.value:
if let (currentPoint, point, controlPoint1) = tupled(current?.point, element.point, element.controlPoint1) {
for index in 1..<numberOfBezierSamples {
let percent = CGFloat(index) / CGFloat(numberOfBezierSamples)
let point = QuadBezierPoint(percent, currentPoint, controlPoint1, point)
results += [point]
}
results += [element.point!]
current = element
}
break;
case kCGPathElementAddCurveToPoint.value:
if let (currentPoint, point, controlPoint1, controlPoint2) = tupled(current?.point, element.point, element.controlPoint1, element.controlPoint2) {
for index in 1..<numberOfBezierSamples {
let percent = CGFloat(index) / CGFloat(numberOfBezierSamples)
let point = CubicBezierPoint(percent, currentPoint, controlPoint1, controlPoint2, point)
results += [point]
}
results += [element.point!]
current = element
}
break;
default:
break;
}
}
return results
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment