99import QuartzCore
1010
1111public struct TimingFunction {
12+ #if swift(>=4.2)
13+ public typealias NameValue = CAMediaTimingFunctionName
14+ public static let `default` = TimingFunction ( name: CAMediaTimingFunctionName . default)
15+ public static let linear = TimingFunction ( name: CAMediaTimingFunctionName . linear)
16+ public static let easeIn = TimingFunction ( name: CAMediaTimingFunctionName . easeIn)
17+ public static let easeOut = TimingFunction ( name: CAMediaTimingFunctionName . easeOut)
18+ public static let easeInEaseOut = TimingFunction ( name: CAMediaTimingFunctionName . easeInEaseOut)
19+ #else
20+ public typealias NameValue = String
1221 public static let `default` = TimingFunction ( name: kCAMediaTimingFunctionDefault)
1322 public static let linear = TimingFunction ( name: kCAMediaTimingFunctionLinear)
1423 public static let easeIn = TimingFunction ( name: kCAMediaTimingFunctionEaseIn)
1524 public static let easeOut = TimingFunction ( name: kCAMediaTimingFunctionEaseOut)
1625 public static let easeInEaseOut = TimingFunction ( name: kCAMediaTimingFunctionEaseInEaseOut)
26+ #endif
1727
18- public let name : String
28+
29+ public let name : NameValue
1930 public let rawValue : CAMediaTimingFunction
2031
21- init ( name: String ) {
32+ init ( name: NameValue ) {
2233 self . name = name
2334 self . rawValue = CAMediaTimingFunction ( name: name)
2435 }
2536
26- init ( name: String , rawValue: CAMediaTimingFunction ) {
37+ init ( name: NameValue , rawValue: CAMediaTimingFunction ) {
2738 self . name = name
2839 self . rawValue = rawValue
2940 }
3041
31- public init ( name: String , controlPoints c1x: Float , _ c1y: Float , _ c2x: Float , _ c2y: Float ) {
42+ public init ( name: NameValue , controlPoints c1x: Float , _ c1y: Float , _ c2x: Float , _ c2y: Float ) {
3243 self . name = name
3344 self . rawValue = CAMediaTimingFunction ( controlPoints: c1x, c1y, c2x, c2y)
3445 }
3546}
3647
3748// - SeeAlso: https://github.com/ai/easings.net/
3849extension TimingFunction {
50+ #if swift(>=4.2)
51+ public static let easeInSine = TimingFunction ( name: TimingFunction . NameValue ( rawValue: " easeInSine " ) , controlPoints: 0.47 , 0 , 0.745 , 0.715 )
52+ public static let easeOutSine = TimingFunction ( name: TimingFunction . NameValue ( rawValue: " easeOutSine " ) , controlPoints: 0.39 , 0.575 , 0.565 , 1 )
53+ public static let easeInOutSine = TimingFunction ( name: TimingFunction . NameValue ( rawValue: " easeInOutSine " ) , controlPoints: 0.445 , 0.05 , 0.55 , 0.95 )
54+ public static let easeInQuad = TimingFunction ( name: TimingFunction . NameValue ( rawValue: " easeInQuad " ) , controlPoints: 0.55 , 0.085 , 0.68 , 0.53 )
55+ public static let easeOutQuad = TimingFunction ( name: TimingFunction . NameValue ( rawValue: " easeOutQuad " ) , controlPoints: 0.25 , 0.46 , 0.45 , 0.94 )
56+ public static let easeInOutQuad = TimingFunction ( name: TimingFunction . NameValue ( rawValue: " easeInOutQuad " ) , controlPoints: 0.455 , 0.03 , 0.515 , 0.955 )
57+ public static let easeInCubic = TimingFunction ( name: TimingFunction . NameValue ( rawValue: " easeInCubic " ) , controlPoints: 0.55 , 0.055 , 0.675 , 0.19 )
58+ public static let easeOutCubic = TimingFunction ( name: TimingFunction . NameValue ( rawValue: " easeOutCubic " ) , controlPoints: 0.215 , 0.61 , 0.355 , 1 )
59+ public static let easeInOutCubic = TimingFunction ( name: TimingFunction . NameValue ( rawValue: " easeInOutCubic " ) , controlPoints: 0.645 , 0.045 , 0.355 , 1 )
60+ public static let easeInQuart = TimingFunction ( name: TimingFunction . NameValue ( rawValue: " easeInQuart " ) , controlPoints: 0.895 , 0.03 , 0.685 , 0.22 )
61+ public static let easeOutQuart = TimingFunction ( name: TimingFunction . NameValue ( rawValue: " easeOutQuart " ) , controlPoints: 0.165 , 0.84 , 0.44 , 1 )
62+ public static let easeInOutQuart = TimingFunction ( name: TimingFunction . NameValue ( rawValue: " easeInOutQuart " ) , controlPoints: 0.77 , 0 , 0.175 , 1 )
63+ public static let easeInQuint = TimingFunction ( name: TimingFunction . NameValue ( rawValue: " easeInQuint " ) , controlPoints: 0.755 , 0.05 , 0.855 , 0.06 )
64+ public static let easeOutQuint = TimingFunction ( name: TimingFunction . NameValue ( rawValue: " easeOutQuint " ) , controlPoints: 0.23 , 1 , 0.32 , 1 )
65+ public static let easeInOutQuint = TimingFunction ( name: TimingFunction . NameValue ( rawValue: " easeInOutQuint " ) , controlPoints: 0.86 , 0 , 0.07 , 1 )
66+ public static let easeInExpo = TimingFunction ( name: TimingFunction . NameValue ( rawValue: " easeInExpo " ) , controlPoints: 0.95 , 0.05 , 0.795 , 0.035 )
67+ public static let easeOutExpo = TimingFunction ( name: TimingFunction . NameValue ( rawValue: " easeOutExpo " ) , controlPoints: 0.19 , 1 , 0.22 , 1 )
68+ public static let easeInOutExpo = TimingFunction ( name: TimingFunction . NameValue ( rawValue: " easeInOutExpo " ) , controlPoints: 1 , 0 , 0 , 1 )
69+ public static let easeInCirc = TimingFunction ( name: TimingFunction . NameValue ( rawValue: " easeInCirc " ) , controlPoints: 0.6 , 0.04 , 0.98 , 0.335 )
70+ public static let easeOutCirc = TimingFunction ( name: TimingFunction . NameValue ( rawValue: " easeOutCirc " ) , controlPoints: 0.075 , 0.82 , 0.165 , 1 )
71+ public static let easeInOutCirc = TimingFunction ( name: TimingFunction . NameValue ( rawValue: " easeInOutCirc " ) , controlPoints: 0.785 , 0.135 , 0.15 , 0.86 )
72+ public static let easeInBack = TimingFunction ( name: TimingFunction . NameValue ( rawValue: " easeInBack " ) , controlPoints: 0.6 , - 0.28 , 0.735 , 0.045 )
73+ public static let easeOutBack = TimingFunction ( name: TimingFunction . NameValue ( rawValue: " easeOutBack " ) , controlPoints: 0.175 , 0.885 , 0.32 , 1.275 )
74+ public static let easeInOutBack = TimingFunction ( name: TimingFunction . NameValue ( rawValue: " easeInOutBack " ) , controlPoints: 0.68 , - 0.55 , 0.265 , 1.55 )
75+ #else
3976 public static let easeInSine = TimingFunction ( name: " easeInSine " , controlPoints: 0.47 , 0 , 0.745 , 0.715 )
4077 public static let easeOutSine = TimingFunction ( name: " easeOutSine " , controlPoints: 0.39 , 0.575 , 0.565 , 1 )
4178 public static let easeInOutSine = TimingFunction ( name: " easeInOutSine " , controlPoints: 0.445 , 0.05 , 0.55 , 0.95 )
@@ -60,4 +97,5 @@ extension TimingFunction {
6097 public static let easeInBack = TimingFunction ( name: " easeInBack " , controlPoints: 0.6 , - 0.28 , 0.735 , 0.045 )
6198 public static let easeOutBack = TimingFunction ( name: " easeOutBack " , controlPoints: 0.175 , 0.885 , 0.32 , 1.275 )
6299 public static let easeInOutBack = TimingFunction ( name: " easeInOutBack " , controlPoints: 0.68 , - 0.55 , 0.265 , 1.55 )
100+ #endif
63101}
0 commit comments