lottie-ios 3.2.2 → 3.4.1
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/.spi.yml +6 -0
- package/.swift-version +1 -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/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 +2003 -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_macOS.xcscheme → Lottie (macOS).xcscheme } +7 -20
- package/Lottie.xcodeproj/xcshareddata/xcschemes/{Lottie_tvOS.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 +115 -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 +39 -0
- package/Lottie.xcworkspace/xcuserdata/calstephens.xcuserdatad/xcdebugger/Expressions.xcexplist +25 -0
- package/Lottie.xcworkspace/xcuserdata/calstephens.xcuserdatad/xcschemes/xcschememanagement.plist +30 -0
- package/Package.resolved +88 -0
- package/Package.swift +10 -15
- package/README.md +40 -60
- package/Rakefile +121 -0
- package/Sources/Private/CoreAnimation/Animations/CAAnimation+TimingConfiguration.swift +81 -0
- package/Sources/Private/CoreAnimation/Animations/CALayer+addAnimation.swift +448 -0
- package/Sources/Private/CoreAnimation/Animations/CombinedShapeAnimation.swift +53 -0
- package/Sources/Private/CoreAnimation/Animations/CustomPathAnimation.swift +41 -0
- package/Sources/Private/CoreAnimation/Animations/EllipseAnimation.swift +28 -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 +31 -0
- package/Sources/Private/CoreAnimation/Animations/ShapeAnimation.swift +246 -0
- package/Sources/Private/CoreAnimation/Animations/StarAnimation.swift +95 -0
- package/Sources/Private/CoreAnimation/Animations/StrokeAnimation.swift +70 -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 +492 -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 +73 -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 +87 -0
- package/Sources/Private/CoreAnimation/Layers/CALayer+setupLayerHierarchy.swift +131 -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 +60 -0
- package/Sources/Private/CoreAnimation/Layers/MaskCompositionLayer.swift +138 -0
- package/Sources/Private/CoreAnimation/Layers/PreCompLayer.swift +140 -0
- package/Sources/Private/CoreAnimation/Layers/ShapeItemLayer.swift +302 -0
- package/Sources/Private/CoreAnimation/Layers/ShapeLayer.swift +319 -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 +93 -85
- 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 +61 -44
- 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} +120 -106
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/Utility/InvertedMatteLayer.swift +25 -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 +4 -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/KeyframeInterpolator.swift +125 -108
- 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 +242 -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 +54 -42
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/RenderNodes/GradientStrokeNode.swift +65 -57
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/RenderNodes/StrokeNode.swift +84 -58
- 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 +197 -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 +75 -0
- package/Sources/Private/Model/ShapeItems/Fill.swift +74 -0
- package/Sources/Private/Model/ShapeItems/GradientFill.swift +124 -0
- package/Sources/Private/Model/ShapeItems/GradientStroke.swift +186 -0
- package/Sources/Private/Model/ShapeItems/Group.swift +48 -0
- package/{lottie-swift/src → Sources}/Private/Model/ShapeItems/Merge.swift +29 -11
- package/Sources/Private/Model/ShapeItems/Rectangle.swift +73 -0
- package/Sources/Private/Model/ShapeItems/Repeater.swift +136 -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 +136 -0
- package/Sources/Private/Model/ShapeItems/Star.swift +132 -0
- package/Sources/Private/Model/ShapeItems/Stroke.swift +102 -0
- package/Sources/Private/Model/ShapeItems/Trim.swift +78 -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 → 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 +94 -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 +215 -0
- package/Tests/SnapshotConfiguration.swift +153 -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 +11 -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/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
|
@@ -5,101 +5,117 @@
|
|
|
5
5
|
// Created by Brandon Withrow on 1/15/19.
|
|
6
6
|
//
|
|
7
7
|
|
|
8
|
-
import Foundation
|
|
9
8
|
import CoreGraphics
|
|
9
|
+
import Foundation
|
|
10
|
+
|
|
11
|
+
// MARK: - KeyframeInterpolator
|
|
10
12
|
|
|
11
13
|
/// A value provider that produces a value at Time from a group of keyframes
|
|
12
|
-
final class KeyframeInterpolator<ValueType>:
|
|
13
|
-
|
|
14
|
+
final class KeyframeInterpolator<ValueType>: ValueProvider where ValueType: AnyInterpolatable {
|
|
15
|
+
|
|
16
|
+
// MARK: Lifecycle
|
|
17
|
+
|
|
14
18
|
init(keyframes: ContiguousArray<Keyframe<ValueType>>) {
|
|
15
19
|
self.keyframes = keyframes
|
|
16
20
|
}
|
|
21
|
+
|
|
22
|
+
// MARK: Internal
|
|
23
|
+
|
|
17
24
|
let keyframes: ContiguousArray<Keyframe<ValueType>>
|
|
18
|
-
|
|
25
|
+
|
|
19
26
|
var valueType: Any.Type {
|
|
20
|
-
|
|
27
|
+
ValueType.self
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
var storage: ValueProviderStorage<ValueType> {
|
|
31
|
+
.closure { [self] frame in
|
|
32
|
+
// First set the keyframe span for the frame.
|
|
33
|
+
updateSpanIndices(frame: frame)
|
|
34
|
+
lastUpdatedFrame = frame
|
|
35
|
+
// If only one keyframe return its value
|
|
36
|
+
let progress: CGFloat
|
|
37
|
+
let value: ValueType
|
|
38
|
+
|
|
39
|
+
if
|
|
40
|
+
let leading = leadingKeyframe,
|
|
41
|
+
let trailing = trailingKeyframe
|
|
42
|
+
{
|
|
43
|
+
/// We have leading and trailing keyframe.
|
|
44
|
+
progress = leading.interpolatedProgress(trailing, keyTime: frame)
|
|
45
|
+
value = leading.interpolate(to: trailing, progress: progress)
|
|
46
|
+
} else if let leading = leadingKeyframe {
|
|
47
|
+
progress = 0
|
|
48
|
+
value = leading.value
|
|
49
|
+
} else if let trailing = trailingKeyframe {
|
|
50
|
+
progress = 1
|
|
51
|
+
value = trailing.value
|
|
52
|
+
} else {
|
|
53
|
+
/// Satisfy the compiler.
|
|
54
|
+
progress = 0
|
|
55
|
+
value = keyframes[0].value
|
|
56
|
+
}
|
|
57
|
+
return value
|
|
58
|
+
}
|
|
21
59
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
- If leading and trailing are both nil.
|
|
40
|
-
*/
|
|
60
|
+
|
|
61
|
+
/// Returns true to trigger a frame update for this interpolator.
|
|
62
|
+
///
|
|
63
|
+
/// An interpolator will be asked if it needs to update every frame.
|
|
64
|
+
/// If the interpolator needs updating it will be asked to compute its value for
|
|
65
|
+
/// the given frame.
|
|
66
|
+
///
|
|
67
|
+
/// Cases a keyframe should not be updated:
|
|
68
|
+
/// - If time is in span and leading keyframe is hold
|
|
69
|
+
/// - If time is after the last keyframe.
|
|
70
|
+
/// - If time is before the first keyframe
|
|
71
|
+
///
|
|
72
|
+
/// Cases for updating a keyframe:
|
|
73
|
+
/// - If time is in the span, and is not a hold
|
|
74
|
+
/// - If time is outside of the span, and there are more keyframes
|
|
75
|
+
/// - If a value delegate is set
|
|
76
|
+
/// - If leading and trailing are both nil.
|
|
41
77
|
func hasUpdate(frame: CGFloat) -> Bool {
|
|
42
78
|
if lastUpdatedFrame == nil {
|
|
43
79
|
return true
|
|
44
80
|
}
|
|
45
81
|
|
|
46
|
-
if
|
|
82
|
+
if
|
|
83
|
+
let leading = leadingKeyframe,
|
|
47
84
|
trailingKeyframe == nil,
|
|
48
|
-
leading.time < frame
|
|
85
|
+
leading.time < frame
|
|
86
|
+
{
|
|
49
87
|
/// Frame is after bounds of keyframes
|
|
50
88
|
return false
|
|
51
89
|
}
|
|
52
|
-
if
|
|
90
|
+
if
|
|
91
|
+
let trailing = trailingKeyframe,
|
|
53
92
|
leadingKeyframe == nil,
|
|
54
|
-
frame < trailing.time
|
|
93
|
+
frame < trailing.time
|
|
94
|
+
{
|
|
55
95
|
/// Frame is before bounds of keyframes
|
|
56
96
|
return false
|
|
57
97
|
}
|
|
58
|
-
if
|
|
98
|
+
if
|
|
99
|
+
let leading = leadingKeyframe,
|
|
59
100
|
let trailing = trailingKeyframe,
|
|
60
101
|
leading.isHold,
|
|
61
102
|
leading.time < frame,
|
|
62
|
-
frame < trailing.time
|
|
103
|
+
frame < trailing.time
|
|
104
|
+
{
|
|
63
105
|
return false
|
|
64
106
|
}
|
|
65
107
|
return true
|
|
66
108
|
}
|
|
67
|
-
|
|
109
|
+
|
|
110
|
+
// MARK: Fileprivate
|
|
111
|
+
|
|
68
112
|
fileprivate var lastUpdatedFrame: CGFloat?
|
|
69
|
-
|
|
70
|
-
@discardableResult
|
|
71
|
-
func value(frame: CGFloat) -> Any {
|
|
72
|
-
// First set the keyframe span for the frame.
|
|
73
|
-
updateSpanIndices(frame: frame)
|
|
74
|
-
lastUpdatedFrame = frame
|
|
75
|
-
// If only one keyframe return its value
|
|
76
|
-
let progress: CGFloat
|
|
77
|
-
let value: ValueType
|
|
78
|
-
|
|
79
|
-
if let leading = leadingKeyframe,
|
|
80
|
-
let trailing = trailingKeyframe {
|
|
81
|
-
/// We have leading and trailing keyframe.
|
|
82
|
-
progress = leading.interpolatedProgress(trailing, keyTime: frame)
|
|
83
|
-
value = leading.interpolate(trailing, progress: progress)
|
|
84
|
-
} else if let leading = leadingKeyframe {
|
|
85
|
-
progress = 0
|
|
86
|
-
value = leading.value
|
|
87
|
-
} else if let trailing = trailingKeyframe {
|
|
88
|
-
progress = 1
|
|
89
|
-
value = trailing.value
|
|
90
|
-
} else {
|
|
91
|
-
/// Satisfy the compiler.
|
|
92
|
-
progress = 0
|
|
93
|
-
value = keyframes[0].value
|
|
94
|
-
}
|
|
95
|
-
return value
|
|
96
|
-
}
|
|
97
|
-
|
|
113
|
+
|
|
98
114
|
fileprivate var leadingIndex: Int? = nil
|
|
99
115
|
fileprivate var trailingIndex: Int? = nil
|
|
100
116
|
fileprivate var leadingKeyframe: Keyframe<ValueType>? = nil
|
|
101
117
|
fileprivate var trailingKeyframe: Keyframe<ValueType>? = nil
|
|
102
|
-
|
|
118
|
+
|
|
103
119
|
/// Finds the appropriate Leading and Trailing keyframe index for the given time.
|
|
104
120
|
fileprivate func updateSpanIndices(frame: CGFloat) {
|
|
105
121
|
guard keyframes.count > 0 else {
|
|
@@ -109,21 +125,19 @@ final class KeyframeInterpolator<ValueType>: AnyValueProvider where ValueType: I
|
|
|
109
125
|
trailingKeyframe = nil
|
|
110
126
|
return
|
|
111
127
|
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
*/
|
|
126
|
-
|
|
128
|
+
|
|
129
|
+
// This function searches through the array to find the span of two keyframes
|
|
130
|
+
// that contain the current time.
|
|
131
|
+
//
|
|
132
|
+
// We could use Array.first(where:) but that would search through the entire array
|
|
133
|
+
// each frame.
|
|
134
|
+
// Instead we track the last used index and search either forwards or
|
|
135
|
+
// backwards from there. This reduces the iterations and complexity from
|
|
136
|
+
//
|
|
137
|
+
// O(n), where n is the length of the sequence to
|
|
138
|
+
// O(n), where n is the number of items after or before the last used index.
|
|
139
|
+
//
|
|
140
|
+
|
|
127
141
|
if keyframes.count == 1 {
|
|
128
142
|
/// Only one keyframe. Set it as first and move on.
|
|
129
143
|
leadingIndex = 0
|
|
@@ -132,10 +146,12 @@ final class KeyframeInterpolator<ValueType>: AnyValueProvider where ValueType: I
|
|
|
132
146
|
trailingKeyframe = nil
|
|
133
147
|
return
|
|
134
148
|
}
|
|
135
|
-
|
|
149
|
+
|
|
136
150
|
/// Sets the initial keyframes. This is often only needed for the first check.
|
|
137
|
-
if
|
|
138
|
-
|
|
151
|
+
if
|
|
152
|
+
leadingIndex == nil,
|
|
153
|
+
trailingIndex == nil
|
|
154
|
+
{
|
|
139
155
|
if frame < keyframes[0].time {
|
|
140
156
|
/// Time is before the first keyframe. Set it as the trailing.
|
|
141
157
|
trailingIndex = 0
|
|
@@ -145,21 +161,22 @@ final class KeyframeInterpolator<ValueType>: AnyValueProvider where ValueType: I
|
|
|
145
161
|
trailingIndex = 1
|
|
146
162
|
}
|
|
147
163
|
}
|
|
148
|
-
|
|
149
|
-
if
|
|
150
|
-
|
|
164
|
+
|
|
165
|
+
if
|
|
166
|
+
let currentTrailing = trailingIndex,
|
|
167
|
+
keyframes[currentTrailing].time <= frame
|
|
168
|
+
{
|
|
151
169
|
/// Time is after the current span. Iterate forward.
|
|
152
170
|
var newLeading = currentTrailing
|
|
153
|
-
var keyframeFound
|
|
171
|
+
var keyframeFound = false
|
|
154
172
|
while !keyframeFound {
|
|
155
|
-
|
|
156
173
|
leadingIndex = newLeading
|
|
157
174
|
trailingIndex = keyframes.validIndex(newLeading + 1)
|
|
158
|
-
|
|
175
|
+
|
|
159
176
|
guard let trailing = trailingIndex else {
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
177
|
+
/// We have reached the end of our keyframes. Time is after the last keyframe.
|
|
178
|
+
keyframeFound = true
|
|
179
|
+
continue
|
|
163
180
|
}
|
|
164
181
|
if frame < keyframes[trailing].time {
|
|
165
182
|
/// Keyframe in current span.
|
|
@@ -169,23 +186,23 @@ final class KeyframeInterpolator<ValueType>: AnyValueProvider where ValueType: I
|
|
|
169
186
|
/// Advance the array.
|
|
170
187
|
newLeading = trailing
|
|
171
188
|
}
|
|
172
|
-
|
|
173
|
-
} else if
|
|
174
|
-
|
|
175
|
-
|
|
189
|
+
|
|
190
|
+
} else if
|
|
191
|
+
let currentLeading = leadingIndex,
|
|
192
|
+
frame < keyframes[currentLeading].time
|
|
193
|
+
{
|
|
176
194
|
/// Time is before the current span. Iterate backwards
|
|
177
195
|
var newTrailing = currentLeading
|
|
178
|
-
|
|
179
|
-
var keyframeFound
|
|
196
|
+
|
|
197
|
+
var keyframeFound = false
|
|
180
198
|
while !keyframeFound {
|
|
181
|
-
|
|
182
199
|
leadingIndex = keyframes.validIndex(newTrailing - 1)
|
|
183
200
|
trailingIndex = newTrailing
|
|
184
|
-
|
|
201
|
+
|
|
185
202
|
guard let leading = leadingIndex else {
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
203
|
+
/// We have reached the end of our keyframes. Time is after the last keyframe.
|
|
204
|
+
keyframeFound = true
|
|
205
|
+
continue
|
|
189
206
|
}
|
|
190
207
|
if keyframes[leading].time <= frame {
|
|
191
208
|
/// Keyframe in current span.
|
|
@@ -201,7 +218,7 @@ final class KeyframeInterpolator<ValueType>: AnyValueProvider where ValueType: I
|
|
|
201
218
|
} else {
|
|
202
219
|
leadingKeyframe = nil
|
|
203
220
|
}
|
|
204
|
-
|
|
221
|
+
|
|
205
222
|
if let keyFrame = trailingIndex {
|
|
206
223
|
trailingKeyframe = keyframes[keyFrame]
|
|
207
224
|
} else {
|
|
@@ -210,24 +227,24 @@ final class KeyframeInterpolator<ValueType>: AnyValueProvider where ValueType: I
|
|
|
210
227
|
}
|
|
211
228
|
}
|
|
212
229
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
func validIndex(_ index: Int) -> Int? {
|
|
230
|
+
extension Array {
|
|
231
|
+
|
|
232
|
+
fileprivate func validIndex(_ index: Int) -> Int? {
|
|
216
233
|
if 0 <= index, index < endIndex {
|
|
217
234
|
return index
|
|
218
235
|
}
|
|
219
236
|
return nil
|
|
220
237
|
}
|
|
221
|
-
|
|
238
|
+
|
|
222
239
|
}
|
|
223
240
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
func validIndex(_ index: Int) -> Int? {
|
|
241
|
+
extension ContiguousArray {
|
|
242
|
+
|
|
243
|
+
fileprivate func validIndex(_ index: Int) -> Int? {
|
|
227
244
|
if 0 <= index, index < endIndex {
|
|
228
245
|
return index
|
|
229
246
|
}
|
|
230
247
|
return nil
|
|
231
248
|
}
|
|
232
|
-
|
|
249
|
+
|
|
233
250
|
}
|
|
@@ -9,30 +9,35 @@ import Foundation
|
|
|
9
9
|
import QuartzCore
|
|
10
10
|
|
|
11
11
|
/// Returns a value for every frame.
|
|
12
|
-
final class SingleValueProvider<ValueType>:
|
|
13
|
-
|
|
12
|
+
final class SingleValueProvider<ValueType: AnyInterpolatable>: ValueProvider {
|
|
13
|
+
|
|
14
|
+
// MARK: Lifecycle
|
|
15
|
+
|
|
16
|
+
init(_ value: ValueType) {
|
|
17
|
+
self.value = value
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// MARK: Internal
|
|
21
|
+
|
|
14
22
|
var value: ValueType {
|
|
15
23
|
didSet {
|
|
16
24
|
hasUpdate = true
|
|
17
25
|
}
|
|
18
26
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
27
|
+
|
|
28
|
+
var storage: ValueProviderStorage<ValueType> {
|
|
29
|
+
.singleValue(value)
|
|
22
30
|
}
|
|
23
|
-
|
|
31
|
+
|
|
24
32
|
var valueType: Any.Type {
|
|
25
|
-
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
func hasUpdate(frame: CGFloat) -> Bool {
|
|
29
|
-
return hasUpdate
|
|
33
|
+
ValueType.self
|
|
30
34
|
}
|
|
31
|
-
|
|
32
|
-
func
|
|
33
|
-
hasUpdate
|
|
34
|
-
return value
|
|
35
|
+
|
|
36
|
+
func hasUpdate(frame _: CGFloat) -> Bool {
|
|
37
|
+
hasUpdate
|
|
35
38
|
}
|
|
36
|
-
|
|
37
|
-
|
|
39
|
+
|
|
40
|
+
// MARK: Private
|
|
41
|
+
|
|
42
|
+
private var hasUpdate = true
|
|
38
43
|
}
|