lottie-ios 3.2.3 → 3.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/actions/setup/action.yml +32 -0
- package/.github/issue_template.md +6 -23
- package/.github/workflows/main.yml +98 -0
- package/.github/workflows/stale_issues.yml +17 -0
- package/.spi.yml +6 -0
- package/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata +7 -0
- package/.swiftpm/xcode/package.xcworkspace/xcuserdata/cal.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/.swiftpm/xcode/package.xcworkspace/xcuserdata/calstephens.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/.swiftpm/xcode/xcuserdata/{brandonwithrow.xcuserdatad → cal.xcuserdatad}/xcschemes/xcschememanagement.plist +25 -15
- package/.swiftpm/xcode/xcuserdata/calstephens.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
- package/Gemfile +4 -0
- package/Gemfile.lock +102 -0
- package/Lottie.xcodeproj/project.pbxproj +2011 -1972
- package/Lottie.xcodeproj/project.xcworkspace/contents.xcworkspacedata +1 -1
- package/Lottie.xcodeproj/project.xcworkspace/xcuserdata/cal.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/Lottie.xcodeproj/xcshareddata/xcschemes/{Lottie_iOS.xcscheme → Lottie (iOS).xcscheme } +15 -18
- package/Lottie.xcodeproj/xcshareddata/xcschemes/{Lottie_tvOS.xcscheme → Lottie (macOS).xcscheme } +5 -18
- package/Lottie.xcodeproj/xcshareddata/xcschemes/{Lottie_macOS.xcscheme → Lottie (tvOS).xcscheme } +5 -18
- package/Lottie.xcodeproj/xcuserdata/cal.xcuserdatad/xcschemes/xcschememanagement.plist +37 -0
- package/Lottie.xcodeproj/xcuserdata/calstephens.xcuserdatad/xcschemes/xcschememanagement.plist +24 -0
- package/Lottie.xcworkspace/contents.xcworkspacedata +10 -0
- package/Lottie.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- package/Lottie.xcworkspace/xcshareddata/swiftpm/Package.resolved +34 -0
- package/Lottie.xcworkspace/xcuserdata/cal.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/{Lottie.xcodeproj/xcuserdata/brandonwithrow.xcuserdatad → Lottie.xcworkspace/xcuserdata/cal.xcuserdatad}/xcdebugger/Breakpoints_v2.xcbkptlist +2 -2
- package/Lottie.xcworkspace/xcuserdata/cal.xcuserdatad/xcdebugger/Expressions.xcexplist +153 -0
- package/Lottie.xcworkspace/xcuserdata/calstephens.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/Lottie.xcworkspace/xcuserdata/calstephens.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +22 -0
- package/Lottie.xcworkspace/xcuserdata/calstephens.xcuserdatad/xcdebugger/Expressions.xcexplist +138 -0
- package/Lottie.xcworkspace/xcuserdata/calstephens.xcuserdatad/xcschemes/xcschememanagement.plist +30 -0
- package/Package.swift +5 -15
- package/README.md +40 -60
- package/Rakefile +160 -0
- package/Sources/Private/CoreAnimation/Animations/CAAnimation+TimingConfiguration.swift +81 -0
- package/Sources/Private/CoreAnimation/Animations/CALayer+addAnimation.swift +447 -0
- package/Sources/Private/CoreAnimation/Animations/CombinedShapeAnimation.swift +81 -0
- package/Sources/Private/CoreAnimation/Animations/CustomPathAnimation.swift +41 -0
- package/Sources/Private/CoreAnimation/Animations/EllipseAnimation.swift +55 -0
- package/Sources/Private/CoreAnimation/Animations/GradientAnimations.swift +210 -0
- package/Sources/Private/CoreAnimation/Animations/LayerProperty.swift +229 -0
- package/Sources/Private/CoreAnimation/Animations/OpacityAnimation.swift +52 -0
- package/Sources/Private/CoreAnimation/Animations/RectangleAnimation.swift +58 -0
- package/Sources/Private/CoreAnimation/Animations/ShapeAnimation.swift +257 -0
- package/Sources/Private/CoreAnimation/Animations/StarAnimation.swift +124 -0
- package/Sources/Private/CoreAnimation/Animations/StrokeAnimation.swift +73 -0
- package/Sources/Private/CoreAnimation/Animations/TransformAnimations.swift +205 -0
- package/Sources/Private/CoreAnimation/Animations/VisibilityAnimation.swift +37 -0
- package/Sources/Private/CoreAnimation/CompatibilityTracker.swift +130 -0
- package/Sources/Private/CoreAnimation/CoreAnimationLayer.swift +497 -0
- package/Sources/Private/CoreAnimation/Extensions/CALayer+fillBounds.swift +35 -0
- package/Sources/Private/CoreAnimation/Extensions/KeyframeGroup+exactlyOneKeyframe.swift +37 -0
- package/Sources/Private/CoreAnimation/Extensions/Keyframes+combinedIfPossible.swift +154 -0
- package/Sources/Private/CoreAnimation/Layers/AnimationLayer.swift +83 -0
- package/Sources/Private/CoreAnimation/Layers/BaseAnimationLayer.swift +33 -0
- package/Sources/Private/CoreAnimation/Layers/BaseCompositionLayer.swift +88 -0
- package/Sources/Private/CoreAnimation/Layers/CALayer+setupLayerHierarchy.swift +167 -0
- package/Sources/Private/CoreAnimation/Layers/GradientRenderLayer.swift +94 -0
- package/Sources/Private/CoreAnimation/Layers/ImageLayer.swift +79 -0
- package/Sources/Private/CoreAnimation/Layers/LayerModel+makeAnimationLayer.swift +64 -0
- package/Sources/Private/CoreAnimation/Layers/MaskCompositionLayer.swift +138 -0
- package/Sources/Private/CoreAnimation/Layers/PreCompLayer.swift +140 -0
- package/Sources/Private/CoreAnimation/Layers/RepeaterLayer.swift +85 -0
- package/Sources/Private/CoreAnimation/Layers/ShapeItemLayer.swift +315 -0
- package/Sources/Private/CoreAnimation/Layers/ShapeLayer.swift +390 -0
- package/Sources/Private/CoreAnimation/Layers/SolidLayer.swift +47 -0
- package/Sources/Private/CoreAnimation/Layers/TextLayer.swift +91 -0
- package/Sources/Private/CoreAnimation/Layers/TransformLayer.swift +11 -0
- package/Sources/Private/CoreAnimation/ValueProviderStore.swift +139 -0
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/CompositionLayer.swift +94 -86
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/ImageCompositionLayer.swift +24 -21
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/MaskContainerLayer.swift +75 -54
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/NullCompositionLayer.swift +5 -5
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/PreCompositionLayer.swift +59 -43
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/ShapeCompositionLayer.swift +22 -20
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/SolidCompositionLayer.swift +26 -17
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/TextCompositionLayer.swift +42 -36
- package/{lottie-swift/src/Private/LayerContainers/AnimationContainer.swift → Sources/Private/MainThread/LayerContainers/MainThreadAnimationLayer.swift} +200 -140
- package/Sources/Private/MainThread/LayerContainers/Utility/CachedImageProvider.swift +47 -0
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/Utility/CompositionLayersInitializer.swift +33 -24
- package/{lottie-swift/src/Private/LayerContainers/Utility/TextLayer.swift → Sources/Private/MainThread/LayerContainers/Utility/CoreTextRenderLayer.swift} +149 -106
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/Utility/InvertedMatteLayer.swift +26 -24
- package/Sources/Private/MainThread/LayerContainers/Utility/LayerFontProvider.swift +41 -0
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/Utility/LayerImageProvider.swift +20 -16
- package/Sources/Private/MainThread/LayerContainers/Utility/LayerTextProvider.swift +40 -0
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/Utility/LayerTransformNode.swift +82 -67
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Extensions/ItemsExtension.swift +9 -4
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/NodeProperty.swift +29 -21
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/Protocols/AnyNodeProperty.swift +16 -10
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/Protocols/AnyValueContainer.swift +6 -6
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/Protocols/KeypathSearchable.swift +5 -5
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/Protocols/NodePropertyMap.swift +10 -8
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/ValueContainer.swift +25 -21
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/ValueProviders/GroupInterpolator.swift +23 -17
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/ValueProviders/SingleValueProvider.swift +22 -17
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/ModifierNodes/TrimPathNode.swift +110 -79
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/OutputNodes/GroupOutputNode.swift +22 -16
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/OutputNodes/PassThroughOutputNode.swift +19 -15
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/OutputNodes/PathOutputNode.swift +22 -20
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/OutputNodes/Renderables/FillRenderer.swift +22 -23
- package/Sources/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/Renderables/GradientFillRenderer.swift +247 -0
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/OutputNodes/Renderables/GradientStrokeRenderer.swift +30 -24
- package/{lottie-swift/src/Private/NodeRenderSystem/Nodes/OutputNodes/Renderables/GradientFillRenderer.swift → Sources/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/Renderables/LegacyGradientFillRenderer.swift} +93 -66
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/OutputNodes/Renderables/StrokeRenderer.swift +23 -19
- package/Sources/Private/MainThread/NodeRenderSystem/Nodes/PathNodes/EllipseNode.swift +139 -0
- package/Sources/Private/MainThread/NodeRenderSystem/Nodes/PathNodes/PolygonNode.swift +170 -0
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/PathNodes/RectNode.swift +95 -58
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/PathNodes/ShapeNode.swift +42 -29
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/PathNodes/StarNode.swift +108 -69
- package/Sources/Private/MainThread/NodeRenderSystem/Nodes/RenderContainers/GroupNode.swift +155 -0
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/RenderNodes/FillNode.swift +51 -37
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/RenderNodes/GradientFillNode.swift +57 -42
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/RenderNodes/GradientStrokeNode.swift +66 -58
- package/Sources/Private/MainThread/NodeRenderSystem/Nodes/RenderNodes/StrokeNode.swift +169 -0
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/Text/TextAnimatorNode.swift +138 -119
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Protocols/AnimatorNode.swift +80 -79
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Protocols/PathNode.swift +5 -3
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Protocols/RenderNode.swift +22 -17
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/RenderLayers/ShapeContainerLayer.swift +27 -24
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/RenderLayers/ShapeRenderLayer.swift +34 -25
- package/Sources/Private/Model/Animation.swift +160 -0
- package/Sources/Private/Model/Assets/Asset.swift +43 -0
- package/{lottie-swift/src → Sources}/Private/Model/Assets/AssetLibrary.swift +40 -13
- package/Sources/Private/Model/Assets/ImageAsset.swift +112 -0
- package/{lottie-swift/src → Sources}/Private/Model/Assets/PrecompAsset.swift +20 -10
- package/Sources/Private/Model/DictionaryInitializable.swift +67 -0
- package/Sources/Private/Model/Extensions/Bundle.swift +34 -0
- package/{lottie-swift/src → Sources}/Private/Model/Extensions/KeyedDecodingContainerExtensions.swift +8 -4
- package/Sources/Private/Model/Keyframes/KeyframeData.swift +113 -0
- package/Sources/Private/Model/Keyframes/KeyframeGroup.swift +222 -0
- package/{lottie-swift/src → Sources}/Private/Model/Layers/ImageLayerModel.swift +21 -11
- package/Sources/Private/Model/Layers/LayerModel.swift +228 -0
- package/{lottie-swift/src → Sources}/Private/Model/Layers/PreCompLayerModel.swift +39 -22
- package/{lottie-swift/src → Sources}/Private/Model/Layers/ShapeLayerModel.swift +23 -12
- package/{lottie-swift/src → Sources}/Private/Model/Layers/SolidLayerModel.swift +31 -19
- package/{lottie-swift/src → Sources}/Private/Model/Layers/TextLayerModel.swift +33 -19
- package/Sources/Private/Model/Objects/DashPattern.swift +44 -0
- package/Sources/Private/Model/Objects/Marker.swift +33 -0
- package/Sources/Private/Model/Objects/Mask.swift +80 -0
- package/Sources/Private/Model/Objects/Transform.swift +179 -0
- package/Sources/Private/Model/ShapeItems/Ellipse.swift +74 -0
- package/Sources/Private/Model/ShapeItems/Fill.swift +74 -0
- package/Sources/Private/Model/ShapeItems/GradientFill.swift +137 -0
- package/Sources/Private/Model/ShapeItems/GradientStroke.swift +185 -0
- package/Sources/Private/Model/ShapeItems/Group.swift +48 -0
- package/{lottie-swift/src → Sources}/Private/Model/ShapeItems/Merge.swift +29 -12
- package/Sources/Private/Model/ShapeItems/Rectangle.swift +72 -0
- package/Sources/Private/Model/ShapeItems/Repeater.swift +135 -0
- package/Sources/Private/Model/ShapeItems/Shape.swift +56 -0
- package/Sources/Private/Model/ShapeItems/ShapeItem.swift +163 -0
- package/Sources/Private/Model/ShapeItems/ShapeTransform.swift +135 -0
- package/Sources/Private/Model/ShapeItems/Star.swift +131 -0
- package/Sources/Private/Model/ShapeItems/Stroke.swift +101 -0
- package/Sources/Private/Model/ShapeItems/Trim.swift +77 -0
- package/Sources/Private/Model/Text/Font.swift +61 -0
- package/{lottie-swift/src → Sources}/Private/Model/Text/Glyph.swift +63 -39
- package/Sources/Private/Model/Text/TextAnimator.swift +164 -0
- package/Sources/Private/Model/Text/TextDocument.swift +123 -0
- package/Sources/Private/RootAnimationLayer.swift +51 -0
- package/{lottie-swift/src → Sources}/Private/Utility/Debugging/AnimatorNodeDebugging.swift +7 -7
- package/{lottie-swift/src → Sources}/Private/Utility/Debugging/LayerDebugging.swift +72 -48
- package/Sources/Private/Utility/Debugging/TestHelpers.swift +10 -0
- package/{lottie-swift/src → Sources}/Private/Utility/Extensions/AnimationKeypathExtension.swift +69 -59
- package/Sources/Private/Utility/Extensions/BlendMode+Filter.swift +31 -0
- package/Sources/Private/Utility/Extensions/CGColor+RGB.swift +22 -0
- package/{lottie-swift/src → Sources}/Private/Utility/Extensions/CGFloatExtensions.swift +70 -67
- package/Sources/Private/Utility/Extensions/DataExtension.swift +27 -0
- package/Sources/Private/Utility/Extensions/MathKit.swift +450 -0
- package/Sources/Private/Utility/Extensions/StringExtensions.swift +38 -0
- package/{lottie-swift/src → Sources}/Private/Utility/Helpers/AnimationContext.swift +42 -16
- package/Sources/Private/Utility/Interpolatable/InterpolatableExtensions.swift +134 -0
- package/{lottie-swift/src → Sources}/Private/Utility/Interpolatable/KeyframeExtensions.swift +13 -10
- package/Sources/Private/Utility/Interpolatable/KeyframeGroup+Extensions.swift +59 -0
- package/{lottie-swift/src/Private/NodeRenderSystem/NodeProperties/ValueProviders → Sources/Private/Utility/Interpolatable}/KeyframeInterpolator.swift +125 -108
- package/{lottie-swift/src → Sources}/Private/Utility/Primitives/BezierPath.swift +229 -143
- package/Sources/Private/Utility/Primitives/CGPointExtension.swift +35 -0
- package/{lottie-swift/src → Sources}/Private/Utility/Primitives/ColorExtension.swift +46 -14
- package/{lottie-swift/src → Sources}/Private/Utility/Primitives/CompoundBezierPath.swift +58 -49
- package/Sources/Private/Utility/Primitives/CurveVertex.swift +184 -0
- package/Sources/Private/Utility/Primitives/PathElement.swift +75 -0
- package/Sources/Private/Utility/Primitives/UnitBezier.swift +115 -0
- package/Sources/Private/Utility/Primitives/VectorsExtensions.swift +341 -0
- package/Sources/Public/Animation/AnimationPublic.swift +266 -0
- package/Sources/Public/Animation/AnimationView.swift +1335 -0
- package/Sources/Public/Animation/AnimationViewInitializers.swift +109 -0
- package/Sources/Public/AnimationCache/AnimationCacheProvider.swift +22 -0
- package/{lottie-swift/src → Sources}/Public/AnimationCache/LRUAnimationCache.swift +22 -18
- package/Sources/Public/DynamicProperties/AnimationKeypath.swift +49 -0
- package/Sources/Public/DynamicProperties/AnyValueProvider.swift +132 -0
- package/{lottie-swift/src → Sources}/Public/DynamicProperties/ValueProviders/ColorValueProvider.swift +54 -36
- package/{lottie-swift/src → Sources}/Public/DynamicProperties/ValueProviders/FloatValueProvider.swift +40 -36
- package/Sources/Public/DynamicProperties/ValueProviders/GradientValueProvider.swift +123 -0
- package/{lottie-swift/src → Sources}/Public/DynamicProperties/ValueProviders/PointValueProvider.swift +40 -35
- package/{lottie-swift/src → Sources}/Public/DynamicProperties/ValueProviders/SizeValueProvider.swift +40 -35
- package/{lottie-swift/src → Sources}/Public/FontProvider/AnimationFontProvider.swift +15 -8
- package/Sources/Public/ImageProvider/AnimationImageProvider.swift +21 -0
- package/Sources/Public/Keyframes/Interpolatable.swift +253 -0
- package/Sources/Public/Keyframes/Keyframe.swift +92 -0
- package/Sources/Public/Logging/LottieLogger.swift +137 -0
- package/Sources/Public/LottieConfiguration.swift +143 -0
- package/{lottie-swift/src → Sources}/Public/Primitives/AnimationTime.swift +1 -1
- package/{lottie-swift/src → Sources}/Public/Primitives/Color.swift +10 -6
- package/{lottie-swift/src → Sources}/Public/Primitives/Vectors.swift +13 -12
- package/Sources/Public/TextProvider/AnimationTextProvider.swift +53 -0
- package/{lottie-swift/src → Sources}/Public/iOS/AnimatedButton.swift +42 -26
- package/{lottie-swift/src → Sources}/Public/iOS/AnimatedControl.swift +100 -91
- package/{lottie-swift/src → Sources}/Public/iOS/AnimatedSwitch.swift +128 -94
- package/{lottie-swift/src → Sources}/Public/iOS/AnimationSubview.swift +3 -3
- package/Sources/Public/iOS/AnimationViewBase.swift +78 -0
- package/{lottie-swift/src → Sources}/Public/iOS/BundleImageProvider.swift +36 -34
- package/{lottie-swift/src → Sources}/Public/iOS/Compatibility/CompatibleAnimationKeypath.swift +4 -0
- package/{lottie-swift/src → Sources}/Public/iOS/Compatibility/CompatibleAnimationView.swift +38 -29
- package/{lottie-swift/src → Sources}/Public/iOS/FilepathImageProvider.swift +24 -21
- package/{lottie-swift/src → Sources}/Public/iOS/UIColorExtension.swift +4 -4
- package/{lottie-swift/src/Public/MacOS/AnimationSubview.swift → Sources/Public/macOS/AnimationSubview.macOS.swift} +4 -5
- package/{lottie-swift/src/Public/MacOS/LottieView.swift → Sources/Public/macOS/AnimationViewBase.macOS.swift} +58 -50
- package/{lottie-swift/src/Public/MacOS/BundleImageProvider.swift → Sources/Public/macOS/BundleImageProvider.macOS.swift} +31 -32
- package/Sources/Public/macOS/FilepathImageProvider.macOS.swift +67 -0
- package/Tests/AnimationKeypathTests.swift +103 -0
- package/Tests/AutomaticEngineTests.swift +57 -0
- package/Tests/BundleTests.swift +25 -0
- package/Tests/DataURLTests.swift +64 -0
- package/Tests/ParsingTests.swift +43 -0
- package/Tests/PerformanceTests.swift +214 -0
- package/Tests/Samples/9squares_AlBoardman.json +1 -0
- package/Tests/Samples/Boat_Loader.json +1 -0
- package/Tests/Samples/HamburgerArrow.json +1 -0
- package/Tests/Samples/IconTransitions.json +1 -0
- package/Tests/Samples/Images/dog.png +0 -0
- package/Tests/Samples/Issues/issue_1125.json +1 -0
- package/Tests/Samples/Issues/issue_1260.json +1 -0
- package/Tests/Samples/Issues/issue_1403.json +1 -0
- package/Tests/Samples/Issues/issue_1407.json +1 -0
- package/Tests/Samples/Issues/issue_1460.json +1 -0
- package/Tests/Samples/Issues/issue_1488.json +1 -0
- package/Tests/Samples/Issues/issue_1505.json +1 -0
- package/Tests/Samples/Issues/issue_1541.json +1 -0
- package/Tests/Samples/Issues/issue_1557.json +1 -0
- package/Tests/Samples/Issues/issue_1603.json +1 -0
- package/Tests/Samples/Issues/issue_1628.json +1 -0
- package/Tests/Samples/Issues/issue_1636.json +1 -0
- package/Tests/Samples/Issues/issue_1643.json +1 -0
- package/Tests/Samples/Issues/issue_1655.json +1 -0
- package/Tests/Samples/Issues/issue_1664.json +1 -0
- package/Tests/Samples/Issues/issue_1683.json +1 -0
- package/Tests/Samples/Issues/issue_1687.json +1 -0
- package/Tests/Samples/Issues/issue_1711.json +1 -0
- package/Tests/Samples/Issues/issue_1717.json +1 -0
- package/Tests/Samples/Issues/issue_769.json +1 -0
- package/Tests/Samples/Issues/issue_885.json +1 -0
- package/Tests/Samples/Issues/issue_965.json +1 -0
- package/Tests/Samples/Issues/pr_1536.json +1 -0
- package/Tests/Samples/Issues/pr_1563.json +8439 -0
- package/Tests/Samples/Issues/pr_1592.json +5527 -0
- package/Tests/Samples/Issues/pr_1599.json +738 -0
- package/Tests/Samples/Issues/pr_1604_1.json +1 -0
- package/Tests/Samples/Issues/pr_1604_2.json +1 -0
- package/Tests/Samples/Issues/pr_1632_1.json +1 -0
- package/Tests/Samples/Issues/pr_1632_2.json +1 -0
- package/Tests/Samples/Issues/pr_1686.json +513 -0
- package/Tests/Samples/Issues/pr_1698.json +1 -0
- package/Tests/Samples/Issues/pr_1699.json +1 -0
- package/Tests/Samples/LottieFiles/LICENSE.md +14 -0
- package/Tests/Samples/LottieFiles/bounce_strokes.json +1 -0
- package/Tests/Samples/LottieFiles/cactus.json +1 -0
- package/Tests/Samples/LottieFiles/dog_car_ride.json +1 -0
- package/Tests/Samples/LottieFiles/draft_icon.json +1 -0
- package/Tests/Samples/LottieFiles/fireworks.json +1 -0
- package/Tests/Samples/LottieFiles/gradient_1.json +1 -0
- package/Tests/Samples/LottieFiles/gradient_2.json +1 -0
- package/Tests/Samples/LottieFiles/gradient_pill.json +1 -0
- package/Tests/Samples/LottieFiles/gradient_shapes.json +1 -0
- package/Tests/Samples/LottieFiles/gradient_square.json +1 -0
- package/Tests/Samples/LottieFiles/growth.json +1 -0
- package/Tests/Samples/LottieFiles/infinity_loader.json +1 -0
- package/Tests/Samples/LottieFiles/loading_dots_1.json +1 -0
- package/Tests/Samples/LottieFiles/loading_dots_2.json +1 -0
- package/Tests/Samples/LottieFiles/loading_dots_3.json +1 -0
- package/Tests/Samples/LottieFiles/loading_gradient_strokes.json +1 -0
- package/Tests/Samples/LottieFiles/settings_slider.json +1 -0
- package/Tests/Samples/LottieFiles/shop.json +1 -0
- package/Tests/Samples/LottieFiles/step_loader.json +1 -0
- package/Tests/Samples/LottieLogo1.json +1 -0
- package/Tests/Samples/LottieLogo1_masked.json +1 -0
- package/Tests/Samples/LottieLogo2.json +1 -0
- package/Tests/Samples/MotionCorpse_Jrcanest.json +1 -0
- package/Tests/Samples/Nonanimating/BasicLayers.json +1 -0
- package/Tests/Samples/Nonanimating/DisableNodesTest.json +1 -0
- package/Tests/Samples/Nonanimating/FirstText.json +1 -0
- package/Tests/Samples/Nonanimating/GeometryTransformTest.json +1 -0
- package/Tests/Samples/Nonanimating/Text_AnimatedProperties.json +1 -0
- package/Tests/Samples/Nonanimating/Text_Glyph.json +1 -0
- package/Tests/Samples/Nonanimating/Text_NoAnimation.json +1 -0
- package/Tests/Samples/Nonanimating/Text_NoGlyph.json +1 -0
- package/Tests/Samples/Nonanimating/Zoom.json +1 -0
- package/Tests/Samples/Nonanimating/_dog.json +1 -0
- package/Tests/Samples/Nonanimating/base64Test.json +1 -0
- package/Tests/Samples/Nonanimating/blend_mode_test.json +1 -0
- package/Tests/Samples/Nonanimating/keypathTest.json +1 -0
- package/Tests/Samples/Nonanimating/verifyLineHeight.json +1 -0
- package/Tests/Samples/PinJump.json +1 -0
- package/Tests/Samples/Switch.json +1 -0
- package/Tests/Samples/Switch_States.json +1 -0
- package/Tests/Samples/TwitterHeart.json +1 -0
- package/Tests/Samples/TwitterHeartButton.json +1 -0
- package/Tests/Samples/TypeFace/A.json +1 -0
- package/Tests/Samples/TypeFace/Apostrophe.json +1 -0
- package/Tests/Samples/TypeFace/B.json +1 -0
- package/Tests/Samples/TypeFace/BlinkingCursor.json +1 -0
- package/Tests/Samples/TypeFace/C.json +1 -0
- package/Tests/Samples/TypeFace/Colon.json +1 -0
- package/Tests/Samples/TypeFace/Comma.json +1 -0
- package/Tests/Samples/TypeFace/D.json +1 -0
- package/Tests/Samples/TypeFace/E.json +1 -0
- package/Tests/Samples/TypeFace/F.json +1 -0
- package/Tests/Samples/TypeFace/G.json +1 -0
- package/Tests/Samples/TypeFace/H.json +1 -0
- package/Tests/Samples/TypeFace/I.json +1 -0
- package/Tests/Samples/TypeFace/J.json +1 -0
- package/Tests/Samples/TypeFace/K.json +1 -0
- package/Tests/Samples/TypeFace/L.json +1 -0
- package/Tests/Samples/TypeFace/M.json +1 -0
- package/Tests/Samples/TypeFace/N.json +1 -0
- package/Tests/Samples/TypeFace/O.json +1 -0
- package/Tests/Samples/TypeFace/P.json +1 -0
- package/Tests/Samples/TypeFace/Q.json +1 -0
- package/Tests/Samples/TypeFace/R.json +1 -0
- package/Tests/Samples/TypeFace/S.json +1 -0
- package/Tests/Samples/TypeFace/T.json +1 -0
- package/Tests/Samples/TypeFace/U.json +1 -0
- package/Tests/Samples/TypeFace/V.json +1 -0
- package/Tests/Samples/TypeFace/W.json +1 -0
- package/Tests/Samples/TypeFace/X.json +1 -0
- package/Tests/Samples/TypeFace/Y.json +1 -0
- package/Tests/Samples/TypeFace/Z.json +1 -0
- package/Tests/Samples/Watermelon.json +1 -0
- package/Tests/Samples/setValueTest.json +1 -0
- package/Tests/Samples/timeremap.json +1 -0
- package/Tests/Samples/vcTransition1.json +1 -0
- package/Tests/Samples/vcTransition2.json +1 -0
- package/Tests/SnapshotConfiguration.swift +158 -0
- package/Tests/SnapshotTests.swift +265 -0
- package/Tests/Utils/Bundle+Module.swift +30 -0
- package/Tests/Utils/HardcodedFontProvider.swift +19 -0
- package/Tests/Utils/HardcodedImageProvider.swift +23 -0
- package/Tests/Utils/Snapshotting+presentationLayer.swift +47 -0
- package/Tests/ValueProvidersTests.swift +27 -0
- package/lottie-ios.podspec +12 -12
- package/package.json +1 -1
- package/script/test-carthage/Cartfile +1 -0
- package/script/test-carthage/Cartfile.resolved +1 -0
- package/script/test-carthage/CarthageTest/AppDelegate.swift +26 -0
- package/script/test-carthage/CarthageTest/Assets.xcassets/AccentColor.colorset/Contents.json +11 -0
- package/script/test-carthage/CarthageTest/Assets.xcassets/AppIcon.appiconset/Contents.json +98 -0
- package/script/test-carthage/CarthageTest/Assets.xcassets/Contents.json +6 -0
- package/script/test-carthage/CarthageTest/Base.lproj/LaunchScreen.storyboard +25 -0
- package/script/test-carthage/CarthageTest/Base.lproj/Main.storyboard +24 -0
- package/script/test-carthage/CarthageTest/Info.plist +66 -0
- package/script/test-carthage/CarthageTest/SceneDelegate.swift +10 -0
- package/script/test-carthage/CarthageTest/ViewController.swift +15 -0
- package/script/test-carthage/CarthageTest-macOS/AppDelegate.swift +7 -0
- package/script/test-carthage/CarthageTest-macOS/Assets.xcassets/AccentColor.colorset/Contents.json +11 -0
- package/script/test-carthage/CarthageTest-macOS/Assets.xcassets/AppIcon.appiconset/Contents.json +58 -0
- package/script/test-carthage/CarthageTest-macOS/Assets.xcassets/Contents.json +6 -0
- package/script/test-carthage/CarthageTest-macOS/Base.lproj/Main.storyboard +717 -0
- package/script/test-carthage/CarthageTest-macOS/CarthageTest_macOS.entitlements +10 -0
- package/script/test-carthage/CarthageTest-macOS/ViewController.swift +15 -0
- package/script/test-carthage/CarthageTest.xcodeproj/project.pbxproj +532 -0
- package/script/test-carthage/CarthageTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- package/script/test-carthage/CarthageTest.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- package/script/test-carthage/CarthageTest.xcodeproj/project.xcworkspace/xcuserdata/cal.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/script/test-carthage/CarthageTest.xcodeproj/project.xcworkspace/xcuserdata/calstephens.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/script/test-carthage/CarthageTest.xcodeproj/xcuserdata/cal.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
- package/script/test-carthage/CarthageTest.xcodeproj/xcuserdata/calstephens.xcuserdatad/xcschemes/xcschememanagement.plist +19 -0
- package/script/test-carthage/Mintfile +1 -0
- package/script/test-spm/LottieSPM.xcworkspace/contents.xcworkspacedata +7 -0
- package/script/test-spm/LottieSPM.xcworkspace/xcuserdata/cal.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/script/test-spm/Mintfile +1 -0
- package/.swiftpm/xcode/package.xcworkspace/xcuserdata/brandonwithrow.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/Lottie/Info.plist +0 -22
- package/Lottie.xcodeproj/project.xcworkspace/xcuserdata/brandonwithrow.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/Lottie.xcodeproj/xcuserdata/brandonwithrow.xcuserdatad/xcschemes/LottieLibraryMacOS.xcscheme +0 -80
- package/Lottie.xcodeproj/xcuserdata/brandonwithrow.xcuserdatad/xcschemes/xcschememanagement.plist +0 -57
- package/lottie-swift/Assets/.gitkeep +0 -0
- package/lottie-swift/src/Private/LayerContainers/Utility/LayerFontProvider.swift +0 -37
- package/lottie-swift/src/Private/LayerContainers/Utility/LayerTextProvider.swift +0 -36
- package/lottie-swift/src/Private/Model/Animation.swift +0 -107
- package/lottie-swift/src/Private/Model/Assets/Asset.swift +0 -27
- package/lottie-swift/src/Private/Model/Assets/ImageAsset.swift +0 -48
- package/lottie-swift/src/Private/Model/Keyframes/Keyframe.swift +0 -128
- package/lottie-swift/src/Private/Model/Keyframes/KeyframeGroup.swift +0 -108
- package/lottie-swift/src/Private/Model/Layers/LayerModel.swift +0 -150
- package/lottie-swift/src/Private/Model/Objects/DashPattern.swift +0 -24
- package/lottie-swift/src/Private/Model/Objects/Marker.swift +0 -23
- package/lottie-swift/src/Private/Model/Objects/Mask.swift +0 -48
- package/lottie-swift/src/Private/Model/Objects/Transform.swift +0 -105
- package/lottie-swift/src/Private/Model/ShapeItems/Ellipse.swift +0 -50
- package/lottie-swift/src/Private/Model/ShapeItems/FillI.swift +0 -49
- package/lottie-swift/src/Private/Model/ShapeItems/GradientFill.swift +0 -86
- package/lottie-swift/src/Private/Model/ShapeItems/GradientStroke.swift +0 -125
- package/lottie-swift/src/Private/Model/ShapeItems/Group.swift +0 -32
- package/lottie-swift/src/Private/Model/ShapeItems/Rectangle.swift +0 -50
- package/lottie-swift/src/Private/Model/ShapeItems/Repeater.swift +0 -80
- package/lottie-swift/src/Private/Model/ShapeItems/Shape.swift +0 -37
- package/lottie-swift/src/Private/Model/ShapeItems/ShapeItem.swift +0 -95
- package/lottie-swift/src/Private/Model/ShapeItems/ShapeTransform.swift +0 -68
- package/lottie-swift/src/Private/Model/ShapeItems/Star.swift +0 -86
- package/lottie-swift/src/Private/Model/ShapeItems/Stroke.swift +0 -67
- package/lottie-swift/src/Private/Model/ShapeItems/Trim.swift +0 -53
- package/lottie-swift/src/Private/Model/Text/Font.swift +0 -35
- package/lottie-swift/src/Private/Model/Text/TextAnimator.swift +0 -99
- package/lottie-swift/src/Private/Model/Text/TextDocument.swift +0 -70
- package/lottie-swift/src/Private/NodeRenderSystem/Nodes/PathNodes/EllipseNode.swift +0 -109
- package/lottie-swift/src/Private/NodeRenderSystem/Nodes/PathNodes/PolygonNode.swift +0 -132
- package/lottie-swift/src/Private/NodeRenderSystem/Nodes/RenderContainers/GroupNode.swift +0 -141
- package/lottie-swift/src/Private/NodeRenderSystem/Nodes/RenderNodes/StrokeNode.swift +0 -127
- package/lottie-swift/src/Private/Utility/Extensions/MathKit.swift +0 -539
- package/lottie-swift/src/Private/Utility/Extensions/StringExtensions.swift +0 -32
- package/lottie-swift/src/Private/Utility/Interpolatable/Interpolatable.swift +0 -18
- package/lottie-swift/src/Private/Utility/Interpolatable/InterpolatableExtensions.swift +0 -170
- package/lottie-swift/src/Private/Utility/Primitives/CurveVertex.swift +0 -177
- package/lottie-swift/src/Private/Utility/Primitives/PathElement.swift +0 -68
- package/lottie-swift/src/Private/Utility/Primitives/VectorsExtensions.swift +0 -218
- package/lottie-swift/src/Public/Animation/AnimationPublic.swift +0 -196
- package/lottie-swift/src/Public/Animation/AnimationView.swift +0 -1006
- package/lottie-swift/src/Public/Animation/AnimationViewInitializers.swift +0 -83
- package/lottie-swift/src/Public/AnimationCache/AnimationCacheProvider.swift +0 -24
- package/lottie-swift/src/Public/DynamicProperties/AnimationKeypath.swift +0 -46
- package/lottie-swift/src/Public/DynamicProperties/AnyValueProvider.swift +0 -29
- package/lottie-swift/src/Public/DynamicProperties/ValueProviders/GradientValueProvider.swift +0 -114
- package/lottie-swift/src/Public/ImageProvider/AnimationImageProvider.swift +0 -23
- package/lottie-swift/src/Public/MacOS/FilepathImageProvider.swift +0 -67
- package/lottie-swift/src/Public/TextProvider/AnimationTextProvider.swift +0 -39
- package/lottie-swift/src/Public/iOS/LottieView.swift +0 -62
- package/lottie-swift-testing.podspec +0 -32
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
// Created by Cal Stephens on 1/24/22.
|
|
2
|
+
// Copyright © 2022 Airbnb Inc. All rights reserved.
|
|
3
|
+
|
|
4
|
+
// MARK: - Keyframe
|
|
5
|
+
|
|
6
|
+
/// A keyframe with a single value, and timing information
|
|
7
|
+
/// about when the value should be displayed and how it
|
|
8
|
+
/// should be interpolated.
|
|
9
|
+
public final class Keyframe<T> {
|
|
10
|
+
|
|
11
|
+
// MARK: Lifecycle
|
|
12
|
+
|
|
13
|
+
/// Initialize a value-only keyframe with no time data.
|
|
14
|
+
public init(
|
|
15
|
+
_ value: T,
|
|
16
|
+
spatialInTangent: Vector3D? = nil,
|
|
17
|
+
spatialOutTangent: Vector3D? = nil)
|
|
18
|
+
{
|
|
19
|
+
self.value = value
|
|
20
|
+
time = 0
|
|
21
|
+
isHold = true
|
|
22
|
+
inTangent = nil
|
|
23
|
+
outTangent = nil
|
|
24
|
+
self.spatialInTangent = spatialInTangent
|
|
25
|
+
self.spatialOutTangent = spatialOutTangent
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/// Initialize a keyframe
|
|
29
|
+
public init(
|
|
30
|
+
value: T,
|
|
31
|
+
time: AnimationFrameTime,
|
|
32
|
+
isHold: Bool = false,
|
|
33
|
+
inTangent: Vector2D? = nil,
|
|
34
|
+
outTangent: Vector2D? = nil,
|
|
35
|
+
spatialInTangent: Vector3D? = nil,
|
|
36
|
+
spatialOutTangent: Vector3D? = nil)
|
|
37
|
+
{
|
|
38
|
+
self.value = value
|
|
39
|
+
self.time = time
|
|
40
|
+
self.isHold = isHold
|
|
41
|
+
self.outTangent = outTangent
|
|
42
|
+
self.inTangent = inTangent
|
|
43
|
+
self.spatialInTangent = spatialInTangent
|
|
44
|
+
self.spatialOutTangent = spatialOutTangent
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// MARK: Public
|
|
48
|
+
|
|
49
|
+
/// The value of the keyframe
|
|
50
|
+
public let value: T
|
|
51
|
+
/// The time in frames of the keyframe.
|
|
52
|
+
public let time: AnimationFrameTime
|
|
53
|
+
/// A hold keyframe freezes interpolation until the next keyframe that is not a hold.
|
|
54
|
+
public let isHold: Bool
|
|
55
|
+
/// The in tangent for the time interpolation curve.
|
|
56
|
+
public let inTangent: Vector2D?
|
|
57
|
+
/// The out tangent for the time interpolation curve.
|
|
58
|
+
public let outTangent: Vector2D?
|
|
59
|
+
|
|
60
|
+
/// The spatial in tangent of the vector.
|
|
61
|
+
public let spatialInTangent: Vector3D?
|
|
62
|
+
/// The spatial out tangent of the vector.
|
|
63
|
+
public let spatialOutTangent: Vector3D?
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// MARK: Equatable
|
|
67
|
+
|
|
68
|
+
extension Keyframe: Equatable where T: Equatable {
|
|
69
|
+
public static func == (lhs: Keyframe<T>, rhs: Keyframe<T>) -> Bool {
|
|
70
|
+
lhs.value == rhs.value
|
|
71
|
+
&& lhs.time == rhs.time
|
|
72
|
+
&& lhs.isHold == rhs.isHold
|
|
73
|
+
&& lhs.inTangent == rhs.inTangent
|
|
74
|
+
&& lhs.outTangent == rhs.outTangent
|
|
75
|
+
&& lhs.spatialInTangent == rhs.spatialOutTangent
|
|
76
|
+
&& lhs.spatialOutTangent == rhs.spatialOutTangent
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// MARK: Hashable
|
|
81
|
+
|
|
82
|
+
extension Keyframe: Hashable where T: Hashable {
|
|
83
|
+
public func hash(into hasher: inout Hasher) {
|
|
84
|
+
hasher.combine(value)
|
|
85
|
+
hasher.combine(time)
|
|
86
|
+
hasher.combine(isHold)
|
|
87
|
+
hasher.combine(inTangent)
|
|
88
|
+
hasher.combine(outTangent)
|
|
89
|
+
hasher.combine(spatialInTangent)
|
|
90
|
+
hasher.combine(spatialOutTangent)
|
|
91
|
+
}
|
|
92
|
+
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
// Created by eric_horacek on 12/9/20.
|
|
2
|
+
// Copyright © 2020 Airbnb Inc. All rights reserved.
|
|
3
|
+
|
|
4
|
+
// MARK: - LottieLogger
|
|
5
|
+
|
|
6
|
+
/// A shared logger that allows consumers to intercept Lottie assertions and warning messages to pipe
|
|
7
|
+
/// into their own logging systems.
|
|
8
|
+
public final class LottieLogger {
|
|
9
|
+
|
|
10
|
+
// MARK: Lifecycle
|
|
11
|
+
|
|
12
|
+
public init(
|
|
13
|
+
assert: @escaping Assert = { condition, message, file, line in
|
|
14
|
+
// If we default to `Swift.assert` directly with `assert: Assert = Swift.assert`,
|
|
15
|
+
// the call will unexpectedly not respect the -O flag and will crash in release
|
|
16
|
+
// https://github.com/apple/swift/issues/60249
|
|
17
|
+
Swift.assert(condition(), message(), file: file, line: line)
|
|
18
|
+
},
|
|
19
|
+
assertionFailure: @escaping AssertionFailure = { message, file, line in
|
|
20
|
+
// If we default to `Swift.assertionFailure` directly with
|
|
21
|
+
// `assertionFailure: AssertionFailure = Swift.assertionFailure`,
|
|
22
|
+
// the call will unexpectedly not respect the -O flag and will crash in release
|
|
23
|
+
// https://github.com/apple/swift/issues/60249
|
|
24
|
+
Swift.assertionFailure(message(), file: file, line: line)
|
|
25
|
+
},
|
|
26
|
+
warn: @escaping Warn = { message, _, _ in
|
|
27
|
+
#if DEBUG
|
|
28
|
+
// swiftlint:disable:next no_direct_standard_out_logs
|
|
29
|
+
print(message())
|
|
30
|
+
#endif
|
|
31
|
+
},
|
|
32
|
+
info: @escaping Info = { message in
|
|
33
|
+
#if DEBUG
|
|
34
|
+
// swiftlint:disable:next no_direct_standard_out_logs
|
|
35
|
+
print(message())
|
|
36
|
+
#endif
|
|
37
|
+
})
|
|
38
|
+
{
|
|
39
|
+
_assert = assert
|
|
40
|
+
_assertionFailure = assertionFailure
|
|
41
|
+
_warn = warn
|
|
42
|
+
_info = info
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// MARK: Public
|
|
46
|
+
|
|
47
|
+
/// Logs that an assertion occurred.
|
|
48
|
+
public typealias Assert = (
|
|
49
|
+
_ condition: @autoclosure () -> Bool,
|
|
50
|
+
_ message: @autoclosure () -> String,
|
|
51
|
+
_ fileID: StaticString,
|
|
52
|
+
_ line: UInt)
|
|
53
|
+
-> Void
|
|
54
|
+
|
|
55
|
+
/// Logs that an assertion failure occurred.
|
|
56
|
+
public typealias AssertionFailure = (
|
|
57
|
+
_ message: @autoclosure () -> String,
|
|
58
|
+
_ fileID: StaticString,
|
|
59
|
+
_ line: UInt)
|
|
60
|
+
-> Void
|
|
61
|
+
|
|
62
|
+
/// Logs a warning message.
|
|
63
|
+
public typealias Warn = (
|
|
64
|
+
_ message: @autoclosure () -> String,
|
|
65
|
+
_ fileID: StaticString,
|
|
66
|
+
_ line: UInt)
|
|
67
|
+
-> Void
|
|
68
|
+
|
|
69
|
+
/// Prints a purely informational message.
|
|
70
|
+
public typealias Info = (_ message: @autoclosure () -> String) -> Void
|
|
71
|
+
|
|
72
|
+
/// The shared instance used to log Lottie assertions and warnings.
|
|
73
|
+
///
|
|
74
|
+
/// Set this to a new logger instance to intercept assertions and warnings logged by Lottie.
|
|
75
|
+
public static var shared = LottieLogger()
|
|
76
|
+
|
|
77
|
+
/// Logs that an assertion occurred.
|
|
78
|
+
public func assert(
|
|
79
|
+
_ condition: @autoclosure () -> Bool,
|
|
80
|
+
_ message: @autoclosure () -> String = String(),
|
|
81
|
+
fileID: StaticString = #fileID,
|
|
82
|
+
line: UInt = #line)
|
|
83
|
+
{
|
|
84
|
+
_assert(condition(), message(), fileID, line)
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/// Logs that an assertion failure occurred.
|
|
88
|
+
public func assertionFailure(
|
|
89
|
+
_ message: @autoclosure () -> String = String(),
|
|
90
|
+
fileID: StaticString = #fileID,
|
|
91
|
+
line: UInt = #line)
|
|
92
|
+
{
|
|
93
|
+
_assertionFailure(message(), fileID, line)
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/// Logs a warning message.
|
|
97
|
+
public func warn(
|
|
98
|
+
_ message: @autoclosure () -> String = String(),
|
|
99
|
+
fileID: StaticString = #fileID,
|
|
100
|
+
line: UInt = #line)
|
|
101
|
+
{
|
|
102
|
+
_warn(message(), fileID, line)
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/// Logs a purely informational message.
|
|
106
|
+
public func info(_ message: @autoclosure () -> String = String()) {
|
|
107
|
+
_info(message())
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// MARK: Private
|
|
111
|
+
|
|
112
|
+
private let _assert: Assert
|
|
113
|
+
private let _assertionFailure: AssertionFailure
|
|
114
|
+
private let _warn: Warn
|
|
115
|
+
private let _info: Info
|
|
116
|
+
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// MARK: - LottieLogger + printToConsole
|
|
120
|
+
|
|
121
|
+
extension LottieLogger {
|
|
122
|
+
/// A `LottieLogger` instance that always prints to the console (by calling `print`)
|
|
123
|
+
/// instead of calling `assert` / `assertionFailure`, which halt execution in debug builds.
|
|
124
|
+
public static var printToConsole: LottieLogger {
|
|
125
|
+
LottieLogger(
|
|
126
|
+
assert: { condition, message, _, _ in
|
|
127
|
+
if !condition() {
|
|
128
|
+
// swiftlint:disable:next no_direct_standard_out_logs
|
|
129
|
+
print(message())
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
assertionFailure: { message, _, _ in
|
|
133
|
+
// swiftlint:disable:next no_direct_standard_out_logs
|
|
134
|
+
print(message())
|
|
135
|
+
})
|
|
136
|
+
}
|
|
137
|
+
}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
// Created by Cal Stephens on 12/13/21.
|
|
2
|
+
// Copyright © 2021 Airbnb Inc. All rights reserved.
|
|
3
|
+
|
|
4
|
+
// MARK: - LottieConfiguration
|
|
5
|
+
|
|
6
|
+
/// Global configuration options for Lottie animations
|
|
7
|
+
public struct LottieConfiguration: Hashable {
|
|
8
|
+
|
|
9
|
+
public init(
|
|
10
|
+
renderingEngine: RenderingEngineOption = .mainThread,
|
|
11
|
+
decodingStrategy: DecodingStrategy = .codable)
|
|
12
|
+
{
|
|
13
|
+
self.renderingEngine = renderingEngine
|
|
14
|
+
self.decodingStrategy = decodingStrategy
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/// The global configuration of Lottie,
|
|
18
|
+
/// which applies to all `AnimationView`s by default.
|
|
19
|
+
public static var shared = LottieConfiguration()
|
|
20
|
+
|
|
21
|
+
/// The rendering engine implementation to use when displaying an animation
|
|
22
|
+
public var renderingEngine: RenderingEngineOption
|
|
23
|
+
|
|
24
|
+
/// The decoding implementation to use when parsing an animation JSON file
|
|
25
|
+
public var decodingStrategy: DecodingStrategy
|
|
26
|
+
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// MARK: - RenderingEngineOption
|
|
30
|
+
|
|
31
|
+
public enum RenderingEngineOption: Hashable {
|
|
32
|
+
/// Uses the Core Animation engine for supported animations, and falls back to using
|
|
33
|
+
/// the Main Thread engine for animations that use features not supported by the
|
|
34
|
+
/// Core Animation engine.
|
|
35
|
+
case automatic
|
|
36
|
+
|
|
37
|
+
/// Uses the specified rendering engine
|
|
38
|
+
case specific(RenderingEngine)
|
|
39
|
+
|
|
40
|
+
/// The Main Thread rendering engine, which supports all Lottie features
|
|
41
|
+
/// but runs on the main thread, which comes with some CPU overhead and
|
|
42
|
+
/// can cause the animation to play at a low framerate when the CPU is busy.
|
|
43
|
+
public static var mainThread: RenderingEngineOption { .specific(.mainThread) }
|
|
44
|
+
|
|
45
|
+
/// The Core Animation rendering engine, that animates using Core Animation
|
|
46
|
+
/// and has better performance characteristics than the Main Thread engine,
|
|
47
|
+
/// but doesn't support all Lottie features.
|
|
48
|
+
public static var coreAnimation: RenderingEngineOption { .specific(.coreAnimation) }
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// MARK: - RenderingEngine
|
|
52
|
+
|
|
53
|
+
/// The rendering engine implementation to use when displaying an animation
|
|
54
|
+
public enum RenderingEngine: Hashable {
|
|
55
|
+
/// The Main Thread rendering engine, which supports all Lottie features
|
|
56
|
+
/// but runs on the main thread, which comes with some CPU overhead and
|
|
57
|
+
/// can cause the animation to play at a low framerate when the CPU is busy.
|
|
58
|
+
case mainThread
|
|
59
|
+
|
|
60
|
+
/// The Core Animation rendering engine, that animates using Core Animation
|
|
61
|
+
/// and has better performance characteristics than the Main Thread engine,
|
|
62
|
+
/// but doesn't support all Lottie features.
|
|
63
|
+
case coreAnimation
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// MARK: - RenderingEngineOption + RawRepresentable, CustomStringConvertible
|
|
67
|
+
|
|
68
|
+
extension RenderingEngineOption: RawRepresentable, CustomStringConvertible {
|
|
69
|
+
|
|
70
|
+
// MARK: Lifecycle
|
|
71
|
+
|
|
72
|
+
public init?(rawValue: String) {
|
|
73
|
+
if rawValue == "Automatic" {
|
|
74
|
+
self = .automatic
|
|
75
|
+
} else if let engine = RenderingEngine(rawValue: rawValue) {
|
|
76
|
+
self = .specific(engine)
|
|
77
|
+
} else {
|
|
78
|
+
return nil
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// MARK: Public
|
|
83
|
+
|
|
84
|
+
public var rawValue: String {
|
|
85
|
+
switch self {
|
|
86
|
+
case .automatic:
|
|
87
|
+
return "Automatic"
|
|
88
|
+
case .specific(let engine):
|
|
89
|
+
return engine.rawValue
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
public var description: String {
|
|
94
|
+
rawValue
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// MARK: - RenderingEngine + RawRepresentable, CustomStringConvertible
|
|
100
|
+
|
|
101
|
+
extension RenderingEngine: RawRepresentable, CustomStringConvertible {
|
|
102
|
+
|
|
103
|
+
// MARK: Lifecycle
|
|
104
|
+
|
|
105
|
+
public init?(rawValue: String) {
|
|
106
|
+
switch rawValue {
|
|
107
|
+
case "Main Thread":
|
|
108
|
+
self = .mainThread
|
|
109
|
+
case "Core Animation":
|
|
110
|
+
self = .coreAnimation
|
|
111
|
+
default:
|
|
112
|
+
return nil
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// MARK: Public
|
|
117
|
+
|
|
118
|
+
public var rawValue: String {
|
|
119
|
+
switch self {
|
|
120
|
+
case .mainThread:
|
|
121
|
+
return "Main Thread"
|
|
122
|
+
case .coreAnimation:
|
|
123
|
+
return "Core Animation"
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
public var description: String {
|
|
128
|
+
rawValue
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// MARK: - DecodingStrategy
|
|
133
|
+
|
|
134
|
+
/// How animation files should be decoded
|
|
135
|
+
public enum DecodingStrategy: Hashable {
|
|
136
|
+
/// Use Codable. This is the default strategy introduced on Lottie 3.
|
|
137
|
+
case codable
|
|
138
|
+
|
|
139
|
+
/// Manually deserialize a dictionary into an Animation.
|
|
140
|
+
/// This should be at least 2-3x faster than using Codable,
|
|
141
|
+
/// but since it's manually implemented, there might be issues while it's experimental.
|
|
142
|
+
case dictionaryBased
|
|
143
|
+
}
|
|
@@ -7,11 +7,13 @@
|
|
|
7
7
|
|
|
8
8
|
import Foundation
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
// MARK: - ColorFormatDenominator
|
|
11
|
+
|
|
12
|
+
public enum ColorFormatDenominator: Hashable {
|
|
11
13
|
case One
|
|
12
14
|
case OneHundred
|
|
13
15
|
case TwoFiftyFive
|
|
14
|
-
|
|
16
|
+
|
|
15
17
|
var value: Double {
|
|
16
18
|
switch self {
|
|
17
19
|
case .One:
|
|
@@ -24,18 +26,20 @@ public enum ColorFormatDenominator {
|
|
|
24
26
|
}
|
|
25
27
|
}
|
|
26
28
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
+
// MARK: - Color
|
|
30
|
+
|
|
31
|
+
public struct Color: Hashable {
|
|
32
|
+
|
|
29
33
|
public var r: Double
|
|
30
34
|
public var g: Double
|
|
31
35
|
public var b: Double
|
|
32
36
|
public var a: Double
|
|
33
|
-
|
|
37
|
+
|
|
34
38
|
public init(r: Double, g: Double, b: Double, a: Double, denominator: ColorFormatDenominator = .One) {
|
|
35
39
|
self.r = r / denominator.value
|
|
36
40
|
self.g = g / denominator.value
|
|
37
41
|
self.b = b / denominator.value
|
|
38
42
|
self.a = a / denominator.value
|
|
39
43
|
}
|
|
40
|
-
|
|
44
|
+
|
|
41
45
|
}
|
|
@@ -7,31 +7,32 @@
|
|
|
7
7
|
|
|
8
8
|
import Foundation
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
// MARK: - Vector1D
|
|
11
|
+
|
|
12
|
+
public struct Vector1D: Hashable {
|
|
13
|
+
|
|
12
14
|
public init(_ value: Double) {
|
|
13
15
|
self.value = value
|
|
14
16
|
}
|
|
15
|
-
|
|
17
|
+
|
|
16
18
|
public let value: Double
|
|
17
|
-
|
|
19
|
+
|
|
18
20
|
}
|
|
19
21
|
|
|
22
|
+
// MARK: - Vector3D
|
|
23
|
+
|
|
24
|
+
/// A three dimensional vector.
|
|
25
|
+
/// These vectors are encoded and decoded from [Double]
|
|
26
|
+
public struct Vector3D: Hashable {
|
|
20
27
|
|
|
21
|
-
/**
|
|
22
|
-
A three dimensional vector.
|
|
23
|
-
These vectors are encoded and decoded from [Double]
|
|
24
|
-
*/
|
|
25
|
-
public struct Vector3D {
|
|
26
|
-
|
|
27
28
|
public let x: Double
|
|
28
29
|
public let y: Double
|
|
29
30
|
public let z: Double
|
|
30
|
-
|
|
31
|
+
|
|
31
32
|
public init(x: Double, y: Double, z: Double) {
|
|
32
33
|
self.x = x
|
|
33
34
|
self.y = y
|
|
34
35
|
self.z = z
|
|
35
36
|
}
|
|
36
|
-
|
|
37
|
+
|
|
37
38
|
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
//
|
|
2
|
+
// AnimationImageProvider.swift
|
|
3
|
+
// Lottie_iOS
|
|
4
|
+
//
|
|
5
|
+
// Created by Alexandr Goncharov on 07/06/2019.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
import Foundation
|
|
9
|
+
|
|
10
|
+
// MARK: - AnimationTextProvider
|
|
11
|
+
|
|
12
|
+
/// Text provider is a protocol that is used to supply text to `AnimationView`.
|
|
13
|
+
public protocol AnimationTextProvider: AnyObject {
|
|
14
|
+
func textFor(keypathName: String, sourceText: String) -> String
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// MARK: - DictionaryTextProvider
|
|
18
|
+
|
|
19
|
+
/// Text provider that simply map values from dictionary
|
|
20
|
+
public final class DictionaryTextProvider: AnimationTextProvider {
|
|
21
|
+
|
|
22
|
+
// MARK: Lifecycle
|
|
23
|
+
|
|
24
|
+
public init(_ values: [String: String]) {
|
|
25
|
+
self.values = values
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// MARK: Public
|
|
29
|
+
|
|
30
|
+
public func textFor(keypathName: String, sourceText: String) -> String {
|
|
31
|
+
values[keypathName] ?? sourceText
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// MARK: Internal
|
|
35
|
+
|
|
36
|
+
let values: [String: String]
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// MARK: - DefaultTextProvider
|
|
40
|
+
|
|
41
|
+
/// Default text provider. Uses text in the animation file
|
|
42
|
+
public final class DefaultTextProvider: AnimationTextProvider {
|
|
43
|
+
|
|
44
|
+
// MARK: Lifecycle
|
|
45
|
+
|
|
46
|
+
public init() { }
|
|
47
|
+
|
|
48
|
+
// MARK: Public
|
|
49
|
+
|
|
50
|
+
public func textFor(keypathName _: String, sourceText: String) -> String {
|
|
51
|
+
sourceText
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -8,40 +8,51 @@
|
|
|
8
8
|
import Foundation
|
|
9
9
|
#if os(iOS) || os(tvOS) || os(watchOS) || targetEnvironment(macCatalyst)
|
|
10
10
|
import UIKit
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
/// An interactive button that plays an animation when pressed.
|
|
12
|
+
open class AnimatedButton: AnimatedControl {
|
|
13
|
+
|
|
14
|
+
// MARK: Lifecycle
|
|
15
|
+
|
|
16
|
+
public override init(
|
|
17
|
+
animation: Animation,
|
|
18
|
+
configuration: LottieConfiguration = .shared)
|
|
19
|
+
{
|
|
20
|
+
super.init(animation: animation, configuration: configuration)
|
|
21
|
+
isAccessibilityElement = true
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
public override init() {
|
|
25
|
+
super.init()
|
|
26
|
+
isAccessibilityElement = true
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
required public init?(coder aDecoder: NSCoder) {
|
|
30
|
+
super.init(coder: aDecoder)
|
|
31
|
+
isAccessibilityElement = true
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// MARK: Public
|
|
35
|
+
|
|
36
|
+
public override var accessibilityTraits: UIAccessibilityTraits {
|
|
37
|
+
set { super.accessibilityTraits = newValue }
|
|
38
|
+
get { super.accessibilityTraits.union(.button) }
|
|
39
|
+
}
|
|
40
|
+
|
|
16
41
|
/// Sets the play range for the given UIControlEvent.
|
|
17
42
|
public func setPlayRange(fromProgress: AnimationProgressTime, toProgress: AnimationProgressTime, event: UIControl.Event) {
|
|
18
43
|
rangesForEvents[event.rawValue] = (from: fromProgress, to: toProgress)
|
|
19
44
|
}
|
|
20
|
-
|
|
45
|
+
|
|
21
46
|
/// Sets the play range for the given UIControlEvent.
|
|
22
47
|
public func setPlayRange(fromMarker fromName: String, toMarker toName: String, event: UIControl.Event) {
|
|
23
|
-
if
|
|
24
|
-
let
|
|
48
|
+
if
|
|
49
|
+
let start = animationView.progressTime(forMarker: fromName),
|
|
50
|
+
let end = animationView.progressTime(forMarker: toName)
|
|
51
|
+
{
|
|
25
52
|
rangesForEvents[event.rawValue] = (from: start, to: end)
|
|
26
53
|
}
|
|
27
54
|
}
|
|
28
|
-
|
|
29
|
-
public override init(animation: Animation) {
|
|
30
|
-
super.init(animation: animation)
|
|
31
|
-
self.accessibilityTraits = UIAccessibilityTraits.button
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
public override init() {
|
|
35
|
-
super.init()
|
|
36
|
-
self.accessibilityTraits = UIAccessibilityTraits.button
|
|
37
|
-
}
|
|
38
55
|
|
|
39
|
-
fileprivate var rangesForEvents: [UInt : (from: CGFloat, to: CGFloat)] = [UIControl.Event.touchUpInside.rawValue : (from: 0, to: 1)]
|
|
40
|
-
|
|
41
|
-
required public init?(coder aDecoder: NSCoder) {
|
|
42
|
-
super.init(coder: aDecoder)
|
|
43
|
-
}
|
|
44
|
-
|
|
45
56
|
public override func beginTracking(_ touch: UITouch, with event: UIEvent?) -> Bool {
|
|
46
57
|
let _ = super.beginTracking(touch, with: event)
|
|
47
58
|
let touchEvent = UIControl.Event.touchDown
|
|
@@ -50,7 +61,7 @@ final public class AnimatedButton: AnimatedControl {
|
|
|
50
61
|
}
|
|
51
62
|
return true
|
|
52
63
|
}
|
|
53
|
-
|
|
64
|
+
|
|
54
65
|
public override func endTracking(_ touch: UITouch?, with event: UIEvent?) {
|
|
55
66
|
super.endTracking(touch, with: event)
|
|
56
67
|
let touchEvent: UIControl.Event
|
|
@@ -59,10 +70,15 @@ final public class AnimatedButton: AnimatedControl {
|
|
|
59
70
|
} else {
|
|
60
71
|
touchEvent = UIControl.Event.touchUpOutside
|
|
61
72
|
}
|
|
62
|
-
|
|
73
|
+
|
|
63
74
|
if let playrange = rangesForEvents[touchEvent.rawValue] {
|
|
64
75
|
animationView.play(fromProgress: playrange.from, toProgress: playrange.to, loopMode: LottieLoopMode.playOnce)
|
|
65
76
|
}
|
|
66
77
|
}
|
|
78
|
+
|
|
79
|
+
// MARK: Private
|
|
80
|
+
|
|
81
|
+
private var rangesForEvents: [UInt : (from: CGFloat, to: CGFloat)] =
|
|
82
|
+
[UIControl.Event.touchUpInside.rawValue : (from: 0, to: 1)]
|
|
67
83
|
}
|
|
68
84
|
#endif
|