LOTInterpolatorCallback.m 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. //
  2. // LOTInterpolatorCallback.m
  3. // Lottie
  4. //
  5. // Created by brandon_withrow on 1/5/18.
  6. // Copyright © 2018 Airbnb. All rights reserved.
  7. //
  8. #import "LOTInterpolatorCallback.h"
  9. #import "CGGeometry+LOTAdditions.h"
  10. @implementation LOTFloatInterpolatorCallback
  11. + (instancetype _Nonnull)withFromFloat:(CGFloat)fromFloat toFloat:(CGFloat)toFloat {
  12. LOTFloatInterpolatorCallback *interpolator = [[self alloc] init];
  13. interpolator.fromFloat = fromFloat;
  14. interpolator.toFloat = toFloat;
  15. return interpolator;
  16. }
  17. - (CGFloat)floatValueForFrame:(CGFloat)currentFrame startKeyframe:(CGFloat)startKeyframe endKeyframe:(CGFloat)endKeyframe interpolatedProgress:(CGFloat)interpolatedProgress startValue:(CGFloat)startValue endValue:(CGFloat)endValue currentValue:(CGFloat)interpolatedValue {
  18. return LOT_RemapValue(self.currentProgress, 0, 1, self.fromFloat, self.toFloat);
  19. }
  20. @end
  21. @implementation LOTPointInterpolatorCallback
  22. + (instancetype _Nonnull)withFromPoint:(CGPoint)fromPoint toPoint:(CGPoint)toPoint {
  23. LOTPointInterpolatorCallback *interpolator = [[self alloc] init];
  24. interpolator.fromPoint = fromPoint;
  25. interpolator.toPoint = toPoint;
  26. return interpolator;
  27. }
  28. - (CGPoint)pointForFrame:(CGFloat)currentFrame startKeyframe:(CGFloat)startKeyframe endKeyframe:(CGFloat)endKeyframe interpolatedProgress:(CGFloat)interpolatedProgress startPoint:(CGPoint)startPoint endPoint:(CGPoint)endPoint currentPoint:(CGPoint)interpolatedPoint {
  29. return LOT_PointInLine(self.fromPoint, self.toPoint, self.currentProgress);
  30. }
  31. @end
  32. @implementation LOTSizeInterpolatorCallback
  33. + (instancetype)withFromSize:(CGSize)fromSize toSize:(CGSize)toSize {
  34. LOTSizeInterpolatorCallback *interpolator = [[self alloc] init];
  35. interpolator.fromSize = fromSize;
  36. interpolator.toSize = toSize;
  37. return interpolator;
  38. }
  39. - (CGSize)sizeForFrame:(CGFloat)currentFrame startKeyframe:(CGFloat)startKeyframe endKeyframe:(CGFloat)endKeyframe interpolatedProgress:(CGFloat)interpolatedProgress startSize:(CGSize)startSize endSize:(CGSize)endSize currentSize:(CGSize)interpolatedSize {
  40. CGPoint from = CGPointMake(self.fromSize.width, self.fromSize.height);
  41. CGPoint to = CGPointMake(self.toSize.width, self.toSize.height);
  42. CGPoint returnPoint = LOT_PointInLine(from, to, self.currentProgress);
  43. return CGSizeMake(returnPoint.x, returnPoint.y);
  44. }
  45. @end