Skip to content

Instantly share code, notes, and snippets.

@aashishdhawan
Created January 25, 2017 12:19
Show Gist options
  • Save aashishdhawan/f91dfc1360a9c3a755d74f91c03fd30c to your computer and use it in GitHub Desktop.
Save aashishdhawan/f91dfc1360a9c3a755d74f91c03fd30c to your computer and use it in GitHub Desktop.
extension CAMediaTimingFunction {
// default
static let `default` = CAMediaTimingFunction(name: kCAMediaTimingFunctionDefault)
static let linear = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)
static let easeIn = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)
static let easeOut = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut)
static let easeInEaseOut = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
// custom
static let easeInSine = CAMediaTimingFunction(controlPoints: 0.47, 0, 0.745, 0.715)
static let easeOutSine = CAMediaTimingFunction(controlPoints: 0.39, 0.575, 0.565, 1)
static let easeInOutSine = CAMediaTimingFunction(controlPoints: 0.445, 0.05, 0.55, 0.95)
static let easeInQuad = CAMediaTimingFunction(controlPoints: 0.55, 0.085, 0.68, 0.53)
static let easeOutQuad = CAMediaTimingFunction(controlPoints: 0.25, 0.46, 0.45, 0.94)
static let easeInOutQuad = CAMediaTimingFunction(controlPoints: 0.455, 0.03, 0.515, 0.955)
static let easeInCubic = CAMediaTimingFunction(controlPoints: 0.55, 0.055, 0.675, 0.19)
static let easeOutCubic = CAMediaTimingFunction(controlPoints: 0.215, 0.61, 0.355, 1)
static let easeInOutCubic = CAMediaTimingFunction(controlPoints: 0.645, 0.045, 0.355, 1)
static let easeInQuart = CAMediaTimingFunction(controlPoints: 0.895, 0.03, 0.685, 0.22)
static let easeOutQuart = CAMediaTimingFunction(controlPoints: 0.165, 0.84, 0.44, 1)
static let easeInOutQuart = CAMediaTimingFunction(controlPoints: 0.77, 0, 0.175, 1)
static let easeInQuint = CAMediaTimingFunction(controlPoints: 0.755, 0.05, 0.855, 0.06)
static let easeOutQuint = CAMediaTimingFunction(controlPoints: 0.23, 1, 0.32, 1)
static let easeInOutQuint = CAMediaTimingFunction(controlPoints: 0.86, 0, 0.07, 1)
static let easeInExpo = CAMediaTimingFunction(controlPoints: 0.95, 0.05, 0.795, 0.035)
static let easeOutExpo = CAMediaTimingFunction(controlPoints: 0.19, 1, 0.22, 1)
static let easeInOutExpo = CAMediaTimingFunction(controlPoints: 1, 0, 0, 1)
static let easeInCirc = CAMediaTimingFunction(controlPoints: 0.6, 0.04, 0.98, 0.335)
static let easeOutCirc = CAMediaTimingFunction(controlPoints: 0.075, 0.82, 0.165, 1)
static let easeInOutCirc = CAMediaTimingFunction(controlPoints: 0.785, 0.135, 0.15, 0.86)
static let easeInBack = CAMediaTimingFunction(controlPoints: 0.6, -0.28, 0.735, 0.045)
static let easeOutBack = CAMediaTimingFunction(controlPoints: 0.175, 0.885, 0.32, 1.275)
static let easeInOutBack = CAMediaTimingFunction(controlPoints: 0.68, -0.55, 0.265, 1.55)
}
@netgfx
Copy link

netgfx commented Aug 29, 2020

In case someone wants to bind these to strings you can use this:

static func getEaseByName(name:String) -> CAMediaTimingFunction {
        switch name {
        case "linear":
            return CAMediaTimingFunction.linear
        case "ease.in":
            return CAMediaTimingFunction.easeIn
        case "ease.out":
            return CAMediaTimingFunction.easeOut
        case "ease.inout":
            return CAMediaTimingFunction.easeInEaseOut
        case "ease.in.sine":
            return CAMediaTimingFunction.easeInSine
        case "ease.out.sine":
            return CAMediaTimingFunction.easeOutSine
        case "ease.inout.sine":
            return CAMediaTimingFunction.easeInOutSine
        case "ease.in.quad":
            return CAMediaTimingFunction.easeInQuad
        case "ease.out.quad":
            return CAMediaTimingFunction.easeOutQuad
        case "ease.inout.quad":
            return CAMediaTimingFunction.easeInOutQuad
        case "ease.in.cubic":
            return CAMediaTimingFunction.easeInCubic
        case "ease.out.cubic":
            return CAMediaTimingFunction.easeOutCubic
        case "ease.inout.cubic":
            return CAMediaTimingFunction.easeInOutCubic
        case "ease.in.quart":
            return CAMediaTimingFunction.easeInQuart
        case "ease.out.quart":
            return CAMediaTimingFunction.easeOutQuart
        case "ease.inout.quart":
            return CAMediaTimingFunction.easeInOutQuart
        case "ease.in.quint":
            return CAMediaTimingFunction.easeInQuint
        case "ease.out.quint":
            return CAMediaTimingFunction.easeOutQuint
        case "ease.inout.quint":
            return CAMediaTimingFunction.easeInOutQuint
        case "ease.in.expo":
            return CAMediaTimingFunction.easeInExpo
        case "ease.out.expo":
            return CAMediaTimingFunction.easeOutExpo
        case "ease.inout.expo":
            return CAMediaTimingFunction.easeInOutExpo
        case "ease.in.circ":
            return CAMediaTimingFunction.easeInCirc
        case "ease.out.circ":
            return CAMediaTimingFunction.easeOutCirc
        case "ease.inout.circ":
            return CAMediaTimingFunction.easeInOutCirc
        case "ease.in.back":
            return CAMediaTimingFunction.easeInBack
        case "ease.out.back":
            return CAMediaTimingFunction.easeOutBack
        case "ease.inout.back":
            return CAMediaTimingFunction.easeInOutBack
        default:
            return CAMediaTimingFunction.default
        }
    }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment