@@ -32,7 +32,7 @@ static CGFloat simulatorAnimationDragCoefficient(void) {
32
32
33
33
static CAMediaTimingFunction * timingFunctionWithControlPoints (CGFloat controlPoints[4 ]);
34
34
static NSArray * coerceUIKitValuesToCoreAnimationValues (NSArray *values);
35
- static CABasicAnimation *animationFromTiming (MDMMotionTiming timing);
35
+ static CABasicAnimation *animationFromTiming (MDMMotionTiming timing, CGFloat timeScaleFactor );
36
36
static void makeAnimationAdditive (CABasicAnimation *animation);
37
37
38
38
@implementation MDMMotionAnimator {
@@ -42,6 +42,7 @@ @implementation MDMMotionAnimator {
42
42
- (instancetype )init {
43
43
self = [super init ];
44
44
if (self) {
45
+ _timeScaleFactor = 1 ;
45
46
_additive = true ;
46
47
}
47
48
return self;
@@ -74,7 +75,8 @@ - (void)animateWithTiming:(MDMMotionTiming)timing
74
75
return ;
75
76
}
76
77
77
- CABasicAnimation *animation = animationFromTiming (timing);
78
+ CGFloat timeScaleFactor = simulatorAnimationDragCoefficient () * _timeScaleFactor;
79
+ CABasicAnimation *animation = animationFromTiming (timing, timeScaleFactor);
78
80
79
81
if (animation) {
80
82
animation.keyPath = keyPath;
@@ -100,7 +102,7 @@ - (void)animateWithTiming:(MDMMotionTiming)timing
100
102
101
103
if (timing.delay != 0 ) {
102
104
animation.beginTime = ([layer convertTime: CACurrentMediaTime () fromLayer: nil ]
103
- + timing.delay * simulatorAnimationDragCoefficient () );
105
+ + timing.delay * timeScaleFactor );
104
106
animation.fillMode = kCAFillModeBackwards ;
105
107
}
106
108
@@ -160,7 +162,7 @@ - (void)addCoreAnimationTracer:(void (^)(CALayer *, CAAnimation *))tracer {
160
162
return values;
161
163
}
162
164
163
- static CABasicAnimation *animationFromTiming (MDMMotionTiming timing) {
165
+ static CABasicAnimation *animationFromTiming (MDMMotionTiming timing, CGFloat timeScaleFactor ) {
164
166
CABasicAnimation *animation;
165
167
switch (timing.curve .type ) {
166
168
case MDMMotionCurveTypeInstant:
@@ -171,7 +173,7 @@ - (void)addCoreAnimationTracer:(void (^)(CALayer *, CAAnimation *))tracer {
171
173
case MDMMotionCurveTypeBezier:
172
174
animation = [CABasicAnimation animation ];
173
175
animation.timingFunction = timingFunctionWithControlPoints (timing.curve .data );
174
- animation.duration = timing.duration * simulatorAnimationDragCoefficient () ;
176
+ animation.duration = timing.duration * timeScaleFactor ;
175
177
break ;
176
178
177
179
case MDMMotionCurveTypeSpring: {
0 commit comments