2017-08-01 14:44:03 -07:00

41 lines
1.3 KiB
Objective-C

//
// LOTPointInterpolator.m
// Lottie
//
// Created by brandon_withrow on 7/12/17.
// Copyright © 2017 Airbnb. All rights reserved.
//
#import "LOTPointInterpolator.h"
#import "CGGeometry+LOTAdditions.h"
@implementation LOTPointInterpolator
- (CGPoint)pointValueForFrame:(NSNumber *)frame {
CGFloat progress = [self progressForFrame:frame];
if (progress == 0) {
return self.leadingKeyframe.pointValue;
}
if (progress == 1) {
return self.trailingKeyframe.pointValue;
}
if (!CGPointEqualToPoint(self.leadingKeyframe.spatialOutTangent, CGPointZero) &&
!CGPointEqualToPoint(self.trailingKeyframe.spatialInTangent, CGPointZero)) {
// Spatial Bezier path
CGPoint outTan = LOT_PointAddedToPoint(self.leadingKeyframe.pointValue, self.leadingKeyframe.spatialOutTangent);
CGPoint inTan = LOT_PointAddedToPoint(self.trailingKeyframe.pointValue, self.trailingKeyframe.spatialInTangent);
return LOT_PointInCubicCurve(self.leadingKeyframe.pointValue, outTan, inTan, self.trailingKeyframe.pointValue, progress);
}
return LOT_PointInLine(self.leadingKeyframe.pointValue, self.trailingKeyframe.pointValue, progress);
}
- (id)keyframeDataForValue:(id)value {
if ([value isKindOfClass:[NSValue class]]) {
CGPoint pointValue = [(NSValue *)value CGPointValue];
return @[@(pointValue.x), @(pointValue.y)];
}
return nil;
}
@end