├── .github ├── FUNDING.yml └── workflows │ ├── create-release.yml │ ├── docc-docs.yml │ └── swift.yml ├── .gitignore ├── Benchmark ├── .swiftpm │ └── xcode │ │ ├── package.xcworkspace │ │ └── contents.xcworkspacedata │ │ └── xcshareddata │ │ └── xcschemes │ │ ├── MotionBenchmark-Package.xcscheme │ │ ├── MotionBenchmark.xcscheme │ │ └── MotionBenchmarkRunner.xcscheme ├── Package.resolved ├── Package.swift └── Sources │ ├── MotionBenchmark │ └── MotionBenchmark.swift │ └── MotionBenchmarkRunner │ └── main.swift ├── Example └── MotionExample-iOS │ ├── MotionExample-iOS.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ └── swiftpm │ │ │ └── Package.resolved │ └── xcshareddata │ │ └── xcschemes │ │ └── MotionExample-iOS.xcscheme │ └── MotionExample-iOS │ ├── AppDelegate.swift │ ├── Assets.xcassets │ ├── AccentColor.colorset │ │ └── Contents.json │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── Contents.json │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── BouncyViewController.swift │ ├── CustomCustomScrollView.swift │ ├── DraggableViewController.swift │ ├── Info.plist │ ├── SceneDelegate.swift │ ├── ScrollViewContents.txt │ ├── ScrollViewController.swift │ ├── SwiftUIDemoView.swift │ └── ViewController.swift ├── LICENSE ├── Package.resolved ├── Package.swift ├── README.md ├── Resources ├── MotionLogo-Dark-Cropped.gif ├── MotionLogo-Dark.gif ├── MotionLogo-Dark.mp4 ├── MotionLogo-Light-Cropped.gif ├── MotionLogo-Light.gif ├── MotionLogo-Light.mp4 ├── MotionMovieMaker │ ├── MotionMovieMaker.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ │ └── swiftpm │ │ │ │ └── Package.resolved │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ └── MotionMovieMaker.xcscheme │ └── MotionMovieMaker │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ ├── AccentColor.colorset │ │ │ └── Contents.json │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── BouncyView.swift │ │ ├── Info.plist │ │ ├── MotionMovieMaker-Bridging-Header.h │ │ ├── SceneDelegate.swift │ │ └── ViewController.swift ├── deprecated │ ├── Motion-Logo-Rendered-Optimized~olde.gif │ ├── Motion-Logo-Rendered.gif │ ├── Motion-Logo-Rendered.m4v │ ├── Motion-Logo-Rendered~dark.gif │ ├── Motion-Logo-Rendered~olde.gif │ ├── MotionLogo-Dark-Cropped.gif │ ├── MotionLogo-Dark.gif │ ├── MotionLogo-Dark.motn │ ├── MotionLogo-Light-Cropped.gif │ ├── MotionLogo-Light.gif │ ├── MotionLogo-Light.motn │ ├── MotionLogo │ │ └── MotionLogo.motn │ └── render_files.sh └── render_files.sh ├── Sources ├── Graphing │ ├── CurveGrapher.swift │ ├── EasingFunctionGraph.swift │ └── ValueAnimationGraph.swift └── Motion │ ├── Animations │ ├── AnimationGroup.swift │ ├── BasicAnimation.swift │ ├── DecayAnimation.swift │ ├── Functions │ │ ├── DecayFunction.swift │ │ ├── EasingFunctions.swift │ │ └── SpringFunction.swift │ ├── SpringAnimation.swift │ └── ValueAnimation.swift │ ├── Documentation.docc │ ├── Documentation.md │ └── Resources │ │ ├── Motion-Logo-Rendered.gif │ │ └── Motion-Logo-Rendered~dark.gif │ ├── Protocols │ ├── AnimationEnvironment.swift │ ├── EquatableEnough.swift │ └── SIMDRepresentable.swift │ └── Utilities │ ├── AnimationDriver.swift │ ├── AnimationEnvironmentProxy.swift │ ├── Animator.swift │ ├── CAKeyframeAnimationEmittable.swift │ ├── CoreAnimationHelpers.swift │ ├── NSScreen+AnimationEnvironment.swift │ ├── RubberBanding.swift │ └── Synchronized.swift ├── Tests ├── LinuxMain.swift └── MotionTests │ ├── BasicAnimationTests.swift │ ├── DecayAnimationTests.swift │ ├── MotionTests.swift │ └── SpringAnimationTests.swift ├── build_docs.sh ├── build_xcframework.sh └── docs ├── css ├── documentation-topic.a7be2880.css ├── documentation-topic~topic~tutorials-overview.5d19221e.css ├── index.dcc9e6fb.css ├── topic.fdc1ac71.css └── tutorials-overview.36413021.css ├── data └── documentation │ ├── motion.json │ └── motion │ ├── animation.json │ ├── animation │ ├── completion.json │ ├── enabled.json │ ├── enableddidchange.json │ ├── hasresolved().json │ ├── init().json │ ├── start().json │ ├── stop(resolveimmediately:postvaluechanged:).json │ └── tick(frame:).json │ ├── animationframe.json │ ├── animationframe │ ├── !=(_:_:).json │ ├── duration.json │ ├── equatable-implementations.json │ ├── init(_:).json │ ├── init(timestamp:targettimestamp:).json │ ├── targettimestamp.json │ └── timestamp.json │ ├── animationgroup.json │ ├── animationgroup │ ├── hasresolved().json │ ├── start().json │ ├── stop(resolveimmediately:postvaluechanged:).json │ └── tick(frame:).json │ ├── basicanimation.json │ ├── basicanimation │ ├── cakeyframeanimationemittable-implementations.json │ ├── duration.json │ ├── easingfunction.json │ ├── fromvalue.json │ ├── hasresolved().json │ ├── init(easingfunction:).json │ ├── keyframeanimation(forframerate:).json │ ├── populatekeyframeanimationdata(dt:values:keytimes:).json │ ├── reset(postvaluechanged:).json │ ├── start().json │ ├── stop(resolveimmediately:postvaluechanged:).json │ └── tick(frame:).json │ ├── bezier.json │ ├── bezier │ ├── !=(_:_:).json │ ├── equatable-implementations.json │ ├── evaluatecurvex(t:).json │ ├── evaluatecurvey(t:).json │ ├── init(x1:y1:x2:y2:).json │ ├── solve(x:epsilon:).json │ ├── solve(y:epsilon:).json │ ├── solvefort(x:epsilon:).json │ ├── solvefort(y:epsilon:).json │ ├── x1.json │ ├── x2.json │ ├── y1.json │ └── y2.json │ ├── cadisableactions(_:).json │ ├── cakeyframeanimationemittable.json │ ├── cakeyframeanimationemittable │ ├── keyframeanimation(forframerate:)-9i7fl.json │ ├── keyframeanimation(forframerate:)-9l4to.json │ └── populatekeyframeanimationdata(dt:values:keytimes:).json │ ├── cakeyframeanimationvalueconvertible.json │ ├── cakeyframeanimationvalueconvertible │ └── tokeyframevalue().json │ ├── decayanimation.json │ ├── decayanimation │ ├── cakeyframeanimationemittable-implementations.json │ ├── decayconstant.json │ ├── hasresolved().json │ ├── init(initialvalue:decayconstant:).json │ ├── keyframeanimation(forframerate:).json │ ├── populatekeyframeanimationdata(dt:values:keytimes:).json │ ├── stop(resolveimmediately:postvaluechanged:).json │ └── tick(frame:).json │ ├── decayfunction.json │ ├── decayfunction │ ├── decayconstant.json │ ├── init(decayconstant:).json │ ├── one_ln_decayconstant_1000.json │ ├── solve(dt:x0:velocity:)-816gf.json │ ├── solve(dt:x0:velocity:)-8qnqq.json │ └── solvesimd(dt:x0:velocity:).json │ ├── easingfunction.json │ ├── easingfunction │ ├── !=(_:_:).json │ ├── bezier.json │ ├── easein.json │ ├── easeinout.json │ ├── easeout.json │ ├── equatable-implementations.json │ ├── hash(into:).json │ ├── init(bezier:).json │ ├── linear.json │ ├── solveinterpolatedvalue(_:fraction:)-2ielp.json │ ├── solveinterpolatedvalue(_:fraction:)-5aer1.json │ └── solveinterpolatedvaluesimd(_:fraction:).json │ ├── equatableenough.json │ ├── equatableenough │ ├── approximatelyequal(to:epsilon:)-131ix.json │ ├── approximatelyequal(to:epsilon:)-4feys.json │ ├── epsilon-2wsxb.json │ ├── epsilon-7tu03.json │ ├── epsilon-8u628.json │ └── epsilontype.json │ ├── floatingpointinitializable.json │ ├── floatingpointinitializable │ ├── init(_:)-8h6ky.json │ └── init(_:)-pp7q.json │ ├── mabs(_:).json │ ├── rubberband(_:coefficient:boundssize:contentsize:).json │ ├── simdrepresentable.json │ ├── simdrepresentable │ ├── init(_:)-23al6.json │ ├── init(_:)-570oy.json │ ├── simdrepresentation()-47m9q.json │ ├── simdrepresentation()-97uc3.json │ ├── simdtype.json │ └── zero.json │ ├── springanimation.json │ ├── springanimation │ ├── cakeyframeanimationemittable-implementations.json │ ├── clampingrange.json │ ├── configure(response:dampingratio:).json │ ├── configure(stiffness:damping:).json │ ├── damping.json │ ├── dampingratio.json │ ├── hasresolved().json │ ├── init(initialvalue:).json │ ├── init(initialvalue:response:dampingratio:).json │ ├── init(initialvalue:stiffness:damping:).json │ ├── keyframeanimation(forframerate:).json │ ├── populatekeyframeanimationdata(dt:values:keytimes:).json │ ├── resolvesuponreachingtovalue.json │ ├── response.json │ ├── stiffness.json │ ├── stop(resolveimmediately:postvaluechanged:).json │ ├── tick(frame:).json │ └── velocity.json │ ├── springfunction.json │ ├── springfunction │ ├── configure(response:dampingratio:).json │ ├── configure(stiffness:damping:).json │ ├── damping.json │ ├── dampingratio.json │ ├── init(response:dampingratio:).json │ ├── init(stiffness:damping:).json │ ├── response.json │ ├── solve(dt:x0:velocity:)-6ic5c.json │ ├── solve(dt:x0:velocity:)-rt6m.json │ ├── solvesimd(dt:x0:velocity:).json │ ├── stiffness.json │ ├── w0.json │ └── wd.json │ ├── supportedscalar.json │ ├── supportedscalar │ ├── cos(_:).json │ ├── exp(_:).json │ ├── pow(_:_:).json │ └── sin(_:).json │ ├── supportedsimd.json │ ├── uiscrollviewdecayconstant.json │ ├── uiscrollviewrubberbandingconstant.json │ ├── valueanimation.json │ └── valueanimation │ ├── !=(_:_:).json │ ├── ==(_:_:).json │ ├── equatable-implementations.json │ ├── hash(into:).json │ ├── hashable-implementations.json │ ├── onvaluechanged(disableactions:_:).json │ ├── resolvingepsilon.json │ ├── stop(resolveimmediately:postvaluechanged:).json │ ├── supportsvelocity.json │ ├── tovalue.json │ ├── updatevalue(to:postvaluechanged:).json │ ├── value.json │ ├── valuechangedcallback.json │ └── velocity.json ├── developer-og-twitter.jpg ├── developer-og.jpg ├── documentation └── motion │ ├── animation │ ├── completion │ │ └── index.html │ ├── enabled │ │ └── index.html │ ├── enableddidchange │ │ └── index.html │ ├── hasresolved() │ │ └── index.html │ ├── index.html │ ├── init() │ │ └── index.html │ ├── start() │ │ └── index.html │ ├── stop(resolveimmediately:postvaluechanged:) │ │ └── index.html │ └── tick(frame:) │ │ └── index.html │ ├── animationframe │ ├── !=(_:_:) │ │ └── index.html │ ├── duration │ │ └── index.html │ ├── equatable-implementations │ │ └── index.html │ ├── index.html │ ├── init(_:) │ │ └── index.html │ ├── init(timestamp:targettimestamp:) │ │ └── index.html │ ├── targettimestamp │ │ └── index.html │ └── timestamp │ │ └── index.html │ ├── animationgroup │ ├── hasresolved() │ │ └── index.html │ ├── index.html │ ├── start() │ │ └── index.html │ ├── stop(resolveimmediately:postvaluechanged:) │ │ └── index.html │ └── tick(frame:) │ │ └── index.html │ ├── basicanimation │ ├── cakeyframeanimationemittable-implementations │ │ └── index.html │ ├── duration │ │ └── index.html │ ├── easingfunction │ │ └── index.html │ ├── fromvalue │ │ └── index.html │ ├── hasresolved() │ │ └── index.html │ ├── index.html │ ├── init(easingfunction:) │ │ └── index.html │ ├── keyframeanimation(forframerate:) │ │ └── index.html │ ├── populatekeyframeanimationdata(dt:values:keytimes:) │ │ └── index.html │ ├── reset(postvaluechanged:) │ │ └── index.html │ ├── start() │ │ └── index.html │ ├── stop(resolveimmediately:postvaluechanged:) │ │ └── index.html │ └── tick(frame:) │ │ └── index.html │ ├── bezier │ ├── !=(_:_:) │ │ └── index.html │ ├── equatable-implementations │ │ └── index.html │ ├── evaluatecurvex(t:) │ │ └── index.html │ ├── evaluatecurvey(t:) │ │ └── index.html │ ├── index.html │ ├── init(x1:y1:x2:y2:) │ │ └── index.html │ ├── solve(x:epsilon:) │ │ └── index.html │ ├── solve(y:epsilon:) │ │ └── index.html │ ├── solvefort(x:epsilon:) │ │ └── index.html │ ├── solvefort(y:epsilon:) │ │ └── index.html │ ├── x1 │ │ └── index.html │ ├── x2 │ │ └── index.html │ ├── y1 │ │ └── index.html │ └── y2 │ │ └── index.html │ ├── cadisableactions(_:) │ └── index.html │ ├── cakeyframeanimationemittable │ ├── index.html │ ├── keyframeanimation(forframerate:)-9i7fl │ │ └── index.html │ ├── keyframeanimation(forframerate:)-9l4to │ │ └── index.html │ └── populatekeyframeanimationdata(dt:values:keytimes:) │ │ └── index.html │ ├── cakeyframeanimationvalueconvertible │ ├── index.html │ └── tokeyframevalue() │ │ └── index.html │ ├── decayanimation │ ├── cakeyframeanimationemittable-implementations │ │ └── index.html │ ├── decayconstant │ │ └── index.html │ ├── hasresolved() │ │ └── index.html │ ├── index.html │ ├── init(initialvalue:decayconstant:) │ │ └── index.html │ ├── keyframeanimation(forframerate:) │ │ └── index.html │ ├── populatekeyframeanimationdata(dt:values:keytimes:) │ │ └── index.html │ ├── stop(resolveimmediately:postvaluechanged:) │ │ └── index.html │ └── tick(frame:) │ │ └── index.html │ ├── decayfunction │ ├── decayconstant │ │ └── index.html │ ├── index.html │ ├── init(decayconstant:) │ │ └── index.html │ ├── one_ln_decayconstant_1000 │ │ └── index.html │ ├── solve(dt:x0:velocity:)-816gf │ │ └── index.html │ ├── solve(dt:x0:velocity:)-8qnqq │ │ └── index.html │ └── solvesimd(dt:x0:velocity:) │ │ └── index.html │ ├── easingfunction │ ├── !=(_:_:) │ │ └── index.html │ ├── bezier │ │ └── index.html │ ├── easein │ │ └── index.html │ ├── easeinout │ │ └── index.html │ ├── easeout │ │ └── index.html │ ├── equatable-implementations │ │ └── index.html │ ├── hash(into:) │ │ └── index.html │ ├── index.html │ ├── init(bezier:) │ │ └── index.html │ ├── linear │ │ └── index.html │ ├── solveinterpolatedvalue(_:fraction:)-2ielp │ │ └── index.html │ ├── solveinterpolatedvalue(_:fraction:)-5aer1 │ │ └── index.html │ └── solveinterpolatedvaluesimd(_:fraction:) │ │ └── index.html │ ├── equatableenough │ ├── approximatelyequal(to:epsilon:)-131ix │ │ └── index.html │ ├── approximatelyequal(to:epsilon:)-4feys │ │ └── index.html │ ├── epsilon-2wsxb │ │ └── index.html │ ├── epsilon-7tu03 │ │ └── index.html │ ├── epsilon-8u628 │ │ └── index.html │ ├── epsilontype │ │ └── index.html │ └── index.html │ ├── floatingpointinitializable │ ├── index.html │ ├── init(_:)-8h6ky │ │ └── index.html │ └── init(_:)-pp7q │ │ └── index.html │ ├── index.html │ ├── mabs(_:) │ └── index.html │ ├── rubberband(_:coefficient:boundssize:contentsize:) │ └── index.html │ ├── simdrepresentable │ ├── index.html │ ├── init(_:)-23al6 │ │ └── index.html │ ├── init(_:)-570oy │ │ └── index.html │ ├── simdrepresentation()-47m9q │ │ └── index.html │ ├── simdrepresentation()-97uc3 │ │ └── index.html │ ├── simdtype │ │ └── index.html │ └── zero │ │ └── index.html │ ├── springanimation │ ├── cakeyframeanimationemittable-implementations │ │ └── index.html │ ├── clampingrange │ │ └── index.html │ ├── configure(response:dampingratio:) │ │ └── index.html │ ├── configure(stiffness:damping:) │ │ └── index.html │ ├── damping │ │ └── index.html │ ├── dampingratio │ │ └── index.html │ ├── hasresolved() │ │ └── index.html │ ├── index.html │ ├── init(initialvalue:) │ │ └── index.html │ ├── init(initialvalue:response:dampingratio:) │ │ └── index.html │ ├── init(initialvalue:stiffness:damping:) │ │ └── index.html │ ├── keyframeanimation(forframerate:) │ │ └── index.html │ ├── populatekeyframeanimationdata(dt:values:keytimes:) │ │ └── index.html │ ├── resolvesuponreachingtovalue │ │ └── index.html │ ├── response │ │ └── index.html │ ├── stiffness │ │ └── index.html │ ├── stop(resolveimmediately:postvaluechanged:) │ │ └── index.html │ ├── tick(frame:) │ │ └── index.html │ └── velocity │ │ └── index.html │ ├── springfunction │ ├── configure(response:dampingratio:) │ │ └── index.html │ ├── configure(stiffness:damping:) │ │ └── index.html │ ├── damping │ │ └── index.html │ ├── dampingratio │ │ └── index.html │ ├── index.html │ ├── init(response:dampingratio:) │ │ └── index.html │ ├── init(stiffness:damping:) │ │ └── index.html │ ├── response │ │ └── index.html │ ├── solve(dt:x0:velocity:)-6ic5c │ │ └── index.html │ ├── solve(dt:x0:velocity:)-rt6m │ │ └── index.html │ ├── solvesimd(dt:x0:velocity:) │ │ └── index.html │ ├── stiffness │ │ └── index.html │ ├── w0 │ │ └── index.html │ └── wd │ │ └── index.html │ ├── supportedscalar │ ├── cos(_:) │ │ └── index.html │ ├── exp(_:) │ │ └── index.html │ ├── index.html │ ├── pow(_:_:) │ │ └── index.html │ └── sin(_:) │ │ └── index.html │ ├── supportedsimd │ └── index.html │ ├── uiscrollviewdecayconstant │ └── index.html │ ├── uiscrollviewrubberbandingconstant │ └── index.html │ └── valueanimation │ ├── !=(_:_:) │ └── index.html │ ├── ==(_:_:) │ └── index.html │ ├── equatable-implementations │ └── index.html │ ├── hash(into:) │ └── index.html │ ├── hashable-implementations │ └── index.html │ ├── index.html │ ├── onvaluechanged(disableactions:_:) │ └── index.html │ ├── resolvingepsilon │ └── index.html │ ├── stop(resolveimmediately:postvaluechanged:) │ └── index.html │ ├── supportsvelocity │ └── index.html │ ├── tovalue │ └── index.html │ ├── updatevalue(to:postvaluechanged:) │ └── index.html │ ├── value │ └── index.html │ ├── valuechangedcallback │ └── index.html │ └── velocity │ └── index.html ├── favicon.ico ├── favicon.svg ├── img ├── added-icon.d6f7e47d.svg ├── deprecated-icon.015b4f17.svg ├── modified-icon.f496e73d.svg └── no-image@2x.df2a0a50.png ├── index.html ├── index └── index.json ├── js ├── chunk-2d0d3105.cd72cc8e.js ├── chunk-vendors.00bf82af.js ├── documentation-topic.3bc2eb6f.js ├── documentation-topic~topic~tutorials-overview.bd94ab17.js ├── highlight-js-bash.1b52852f.js ├── highlight-js-c.d1db3f17.js ├── highlight-js-cpp.eaddddbe.js ├── highlight-js-css.75eab1fe.js ├── highlight-js-custom-markdown.7cffc4b3.js ├── highlight-js-custom-swift.a62dfec9.js ├── highlight-js-diff.62d66733.js ├── highlight-js-http.163e45b6.js ├── highlight-js-java.8326d9d8.js ├── highlight-js-javascript.acb8a8eb.js ├── highlight-js-json.471128d2.js ├── highlight-js-llvm.6100b125.js ├── highlight-js-markdown.90077643.js ├── highlight-js-objectivec.bcdf5156.js ├── highlight-js-perl.757d7b6f.js ├── highlight-js-php.cc8d6c27.js ├── highlight-js-python.c214ed92.js ├── highlight-js-ruby.f889d392.js ├── highlight-js-scss.62ee18da.js ├── highlight-js-shell.dd7f411f.js ├── highlight-js-swift.84f3e88c.js ├── highlight-js-xml.9c3688c7.js ├── index.c37d1972.js ├── topic.897e6b8e.js └── tutorials-overview.abddae14.js ├── metadata.json └── theme-settings.json /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: b3ll 4 | -------------------------------------------------------------------------------- /.github/workflows/create-release.yml: -------------------------------------------------------------------------------- 1 | name: Create Release 2 | 3 | # Create xcframework when a version is tagged 4 | on: 5 | create: 6 | tags: 7 | 8 | jobs: 9 | create_release: 10 | name: Create Release 11 | runs-on: macos-14 12 | steps: 13 | - uses: maxim-lobanov/setup-xcode@v1 14 | with: 15 | xcode-version: latest-stable 16 | - uses: actions/checkout@v2 17 | 18 | - run: ${GITHUB_WORKSPACE}/build_xcframework.sh 19 | 20 | - name: Create Release 21 | id: create_release 22 | uses: actions/create-release@v1 23 | env: 24 | GITHUB_TOKEN: ${{ secrets.GH_ACCESS_TOKEN }} 25 | with: 26 | tag_name: ${{ github.ref }} 27 | release_name: Release ${{ github.ref }} 28 | draft: false 29 | prerelease: false 30 | 31 | - name: Upload Release Asset 32 | id: upload-release-asset 33 | uses: actions/upload-release-asset@v1 34 | env: 35 | GITHUB_TOKEN: ${{ secrets.GH_ACCESS_TOKEN }} 36 | with: 37 | upload_url: ${{ steps.create_release.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps 38 | asset_path: ./Motion.zip 39 | asset_name: Motion.zip 40 | asset_content_type: application/zip 41 | -------------------------------------------------------------------------------- /.github/workflows/docc-docs.yml: -------------------------------------------------------------------------------- 1 | name: Docs 2 | 3 | on: [push] 4 | 5 | jobs: 6 | deploy_docs: 7 | runs-on: macos-14 8 | steps: 9 | - uses: actions/checkout@v2 10 | 11 | - name: Setup Swift 5.9 12 | uses: swift-actions/setup-swift@v1 13 | with: 14 | swift-version: '5.9' 15 | 16 | - name: Build Docs 17 | uses: sersoft-gmbh/swifty-docs-action@v3.0.0 18 | with: 19 | output: docs 20 | targets: Motion 21 | enable-index-building: false 22 | transform-for-static-hosting: true 23 | hosting-base-path: Motion 24 | 25 | - name: Deploy to GitHub Pages 26 | uses: peaceiris/actions-gh-pages@v3 27 | with: 28 | github_token: ${{ secrets.GH_ACCESS_TOKEN }} 29 | publish_dir: ./docs 30 | -------------------------------------------------------------------------------- /.github/workflows/swift.yml: -------------------------------------------------------------------------------- 1 | name: Tests 2 | 3 | on: 4 | push: 5 | branches: [main] 6 | pull_request: 7 | branches: [main] 8 | 9 | jobs: 10 | build: 11 | runs-on: macos-14 12 | 13 | steps: 14 | - uses: actions/checkout@v2 15 | - name: Build 16 | run: swift build -v 17 | - name: Run tests 18 | run: swift test -v 19 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | /.build 3 | /Packages 4 | xcuserdata/ 5 | /.swiftpm 6 | Pods 7 | Benchmark/Packages 8 | Benchmark/.build 9 | Benchmark/.swiftpm 10 | Resources/deprecated/MotionLogo-Dark.mov 11 | Resources/deprecated/MotionLogo-Light.mov 12 | build 13 | Motion.zip 14 | -------------------------------------------------------------------------------- /Benchmark/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Benchmark/.swiftpm/xcode/xcshareddata/xcschemes/MotionBenchmark.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 44 | 50 | 51 | 57 | 58 | 59 | 60 | 62 | 63 | 66 | 67 | 68 | -------------------------------------------------------------------------------- /Benchmark/.swiftpm/xcode/xcshareddata/xcschemes/MotionBenchmarkRunner.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 45 | 51 | 52 | 53 | 54 | 60 | 62 | 68 | 69 | 70 | 71 | 73 | 74 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /Benchmark/Package.resolved: -------------------------------------------------------------------------------- 1 | { 2 | "object": { 3 | "pins": [ 4 | { 5 | "package": "swift-argument-parser", 6 | "repositoryURL": "https://github.com/apple/swift-argument-parser", 7 | "state": { 8 | "branch": null, 9 | "revision": "92646c0cdbaca076c8d3d0207891785b3379cbff", 10 | "version": "0.3.1" 11 | } 12 | }, 13 | { 14 | "package": "Benchmark", 15 | "repositoryURL": "https://github.com/google/swift-benchmark", 16 | "state": { 17 | "branch": null, 18 | "revision": "8e0ef8bb7482ab97dcd2cd1d6855bd38921c345d", 19 | "version": "0.1.0" 20 | } 21 | }, 22 | { 23 | "package": "swift-numerics", 24 | "repositoryURL": "https://github.com/apple/swift-numerics", 25 | "state": { 26 | "branch": null, 27 | "revision": "0a5bc04095a675662cf24757cc0640aa2204253b", 28 | "version": "1.0.2" 29 | } 30 | } 31 | ] 32 | }, 33 | "version": 1 34 | } 35 | -------------------------------------------------------------------------------- /Benchmark/Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version:5.3 2 | // The swift-tools-version declares the minimum version of Swift required to build this package. 3 | 4 | import PackageDescription 5 | 6 | let package = Package( 7 | name: "MotionBenchmark", 8 | platforms: [ 9 | .iOS(.v13), 10 | .tvOS(.v13), 11 | .macOS(.v10_15), 12 | ], 13 | products: [ 14 | // Products define the executables and libraries a package produces, and make them visible to other packages. 15 | .library( 16 | name: "MotionBenchmark", 17 | targets: ["MotionBenchmark"]), 18 | ], 19 | dependencies: [ 20 | // Dependencies declare other packages that this package depends on. 21 | .package(name: "Motion", path: "../"), 22 | .package(name: "Benchmark", url: "https://github.com/google/swift-benchmark", from: "0.1.0"), 23 | ], 24 | targets: [ 25 | // Targets are the basic building blocks of a package. A target can define a module or a test suite. 26 | // Targets can depend on other targets in this package, and on products in packages this package depends on. 27 | .target( 28 | name: "MotionBenchmark", 29 | dependencies: [ 30 | "Motion", 31 | "Benchmark", 32 | ]), 33 | .target( 34 | name: "MotionBenchmarkRunner", 35 | dependencies: [ 36 | "MotionBenchmark", 37 | ]), 38 | ], 39 | swiftLanguageVersions: [.v5] 40 | ) 41 | -------------------------------------------------------------------------------- /Benchmark/Sources/MotionBenchmarkRunner/main.swift: -------------------------------------------------------------------------------- 1 | // 2 | // main.swift 3 | // 4 | // 5 | // Created by Adam Bell on 11/24/20. 6 | // 7 | 8 | import Foundation 9 | import Benchmark 10 | import Motion 11 | import MotionBenchmark 12 | 13 | #if os(macOS) 14 | RunBenchmark() 15 | #endif 16 | -------------------------------------------------------------------------------- /Example/MotionExample-iOS/MotionExample-iOS.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/MotionExample-iOS/MotionExample-iOS.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Example/MotionExample-iOS/MotionExample-iOS.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved: -------------------------------------------------------------------------------- 1 | { 2 | "object": { 3 | "pins": [ 4 | { 5 | "package": "swift-argument-parser", 6 | "repositoryURL": "https://github.com/apple/swift-argument-parser", 7 | "state": { 8 | "branch": null, 9 | "revision": "92646c0cdbaca076c8d3d0207891785b3379cbff", 10 | "version": "0.3.1" 11 | } 12 | }, 13 | { 14 | "package": "Benchmark", 15 | "repositoryURL": "https://github.com/google/swift-benchmark", 16 | "state": { 17 | "branch": null, 18 | "revision": "8e0ef8bb7482ab97dcd2cd1d6855bd38921c345d", 19 | "version": "0.1.0" 20 | } 21 | }, 22 | { 23 | "package": "SwiftDocCPlugin", 24 | "repositoryURL": "https://github.com/apple/swift-docc-plugin", 25 | "state": { 26 | "branch": null, 27 | "revision": "3303b164430d9a7055ba484c8ead67a52f7b74f6", 28 | "version": "1.0.0" 29 | } 30 | }, 31 | { 32 | "package": "swift-numerics", 33 | "repositoryURL": "https://github.com/apple/swift-numerics", 34 | "state": { 35 | "branch": null, 36 | "revision": "0a5bc04095a675662cf24757cc0640aa2204253b", 37 | "version": "1.0.2" 38 | } 39 | } 40 | ] 41 | }, 42 | "version": 1 43 | } 44 | -------------------------------------------------------------------------------- /Example/MotionExample-iOS/MotionExample-iOS/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // MotionExample-iOS 4 | // 5 | // Created by Adam Bell on 8/25/20. 6 | // 7 | 8 | // no u 9 | 10 | import Motion 11 | import MotionBenchmark 12 | import UIKit 13 | 14 | public let MotionBlue = UIColor(red: 0.47, green: 0.80, blue: 0.99, alpha: 1.00) 15 | 16 | @main 17 | class AppDelegate: UIResponder, UIApplicationDelegate { 18 | 19 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 20 | // Override point for customization after application launch. 21 | if CommandLine.arguments.contains("--benchmark") { 22 | DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) { 23 | RunBenchmark() 24 | } 25 | } 26 | 27 | return true 28 | } 29 | 30 | // MARK: UISceneSession Lifecycle 31 | 32 | func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { 33 | // Called when a new scene session is being created. 34 | // Use this method to select a configuration to create the new scene with. 35 | return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) 36 | } 37 | 38 | func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { 39 | // Called when the user discards a scene session. 40 | // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. 41 | // Use this method to release any resources that were specific to the discarded scenes, as they will not return. 42 | } 43 | 44 | 45 | } 46 | 47 | -------------------------------------------------------------------------------- /Example/MotionExample-iOS/MotionExample-iOS/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Example/MotionExample-iOS/MotionExample-iOS/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "scale" : "2x", 6 | "size" : "20x20" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "scale" : "3x", 11 | "size" : "20x20" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "scale" : "2x", 16 | "size" : "29x29" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "scale" : "3x", 21 | "size" : "29x29" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "scale" : "2x", 26 | "size" : "40x40" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "scale" : "3x", 31 | "size" : "40x40" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "scale" : "2x", 36 | "size" : "60x60" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "scale" : "3x", 41 | "size" : "60x60" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "scale" : "1x", 46 | "size" : "20x20" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "scale" : "2x", 51 | "size" : "20x20" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "scale" : "1x", 56 | "size" : "29x29" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "scale" : "2x", 61 | "size" : "29x29" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "scale" : "1x", 66 | "size" : "40x40" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "scale" : "2x", 71 | "size" : "40x40" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "scale" : "1x", 76 | "size" : "76x76" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "scale" : "2x", 81 | "size" : "76x76" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "scale" : "2x", 86 | "size" : "83.5x83.5" 87 | }, 88 | { 89 | "idiom" : "ios-marketing", 90 | "scale" : "1x", 91 | "size" : "1024x1024" 92 | } 93 | ], 94 | "info" : { 95 | "author" : "xcode", 96 | "version" : 1 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /Example/MotionExample-iOS/MotionExample-iOS/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Example/MotionExample-iOS/MotionExample-iOS/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /Example/MotionExample-iOS/MotionExample-iOS/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /Example/MotionExample-iOS/MotionExample-iOS/BouncyViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // MotionExample-iOS 4 | // 5 | // Created by Adam Bell on 8/25/20. 6 | // 7 | 8 | import Motion 9 | import UIKit 10 | 11 | internal class BouncyView: UIView { 12 | 13 | lazy var spring: SpringAnimation = { 14 | let animation = SpringAnimation(initialValue: 1.0) 15 | animation.configure(response: 0.4, dampingRatio: 0.4) 16 | animation.onValueChanged(disableActions: true) { [weak self] (newValue) in 17 | self?.layer.transform = CATransform3DMakeScale(newValue, newValue, 1.0) 18 | } 19 | return animation 20 | }() 21 | 22 | override var bounds: CGRect { 23 | didSet { 24 | self.layer.cornerRadius = bounds.size.width / 2.0 25 | } 26 | } 27 | 28 | override func touchesBegan(_ touches: Set, with event: UIEvent?) { 29 | super.touchesBegan(touches, with: event) 30 | 31 | spring.toValue = 0.5 32 | spring.start() 33 | } 34 | 35 | override func touchesEnded(_ touches: Set, with event: UIEvent?) { 36 | super.touchesEnded(touches, with: event) 37 | 38 | spring.toValue = 1.0 39 | spring.velocity = 50.0 40 | spring.start() 41 | } 42 | 43 | override func touchesCancelled(_ touches: Set, with event: UIEvent?) { 44 | super.touchesCancelled(touches, with: event) 45 | 46 | spring.toValue = 1.0 47 | spring.velocity = 0.0 48 | spring.start() 49 | } 50 | 51 | } 52 | 53 | class BouncyViewController: UIViewController { 54 | 55 | fileprivate var bouncyView: BouncyView! 56 | 57 | override func viewDidLoad() { 58 | super.viewDidLoad() 59 | 60 | self.bouncyView = BouncyView(frame: .zero) 61 | bouncyView.backgroundColor = MotionBlue 62 | view.addSubview(bouncyView) 63 | } 64 | 65 | override func viewDidLayoutSubviews() { 66 | super.viewDidLayoutSubviews() 67 | 68 | bouncyView.bounds = CGRect(x: 0.0, y: 0.0, width: 88.0, height: 88.0) 69 | bouncyView.layer.position = CGPoint(x: view.bounds.size.width / 2.0, y: view.bounds.size.height / 2.0) 70 | } 71 | 72 | } 73 | 74 | import SwiftUI 75 | 76 | public struct BouncyDemo: UIViewControllerRepresentable { 77 | 78 | public func makeUIViewController(context: Context) -> some UIViewController { 79 | return BouncyViewController(nibName: nil, bundle: nil) 80 | } 81 | 82 | public func updateUIViewController(_ uiViewController: UIViewControllerType, context: Context) { 83 | 84 | } 85 | 86 | } 87 | -------------------------------------------------------------------------------- /Example/MotionExample-iOS/MotionExample-iOS/DraggableViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DraggableViewViewController.swift 3 | // MotionExample-iOS 4 | // 5 | // Created by Adam Bell on 12/11/20. 6 | // 7 | 8 | import Motion 9 | import UIKit 10 | 11 | class DraggableViewController: UIViewController { 12 | 13 | let draggableView = UIView(frame: .zero) 14 | let spring = SpringAnimation(response: 0.8, dampingRatio: 0.5) 15 | 16 | override func viewDidLoad() { 17 | super.viewDidLoad() 18 | 19 | draggableView.layer.masksToBounds = true 20 | draggableView.backgroundColor = MotionBlue 21 | view.addSubview(draggableView) 22 | 23 | let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(didPan(_:))) 24 | draggableView.addGestureRecognizer(panGestureRecognizer) 25 | 26 | draggableView.center = view.center 27 | } 28 | 29 | override func viewDidLayoutSubviews() { 30 | super.viewDidLayoutSubviews() 31 | 32 | draggableView.bounds.size = CGSize(width: 64.0, height: 64.0) 33 | draggableView.layer.cornerRadius = draggableView.bounds.size.height / 2.0 34 | } 35 | 36 | @objc private func didPan(_ gestureRecognizer: UIPanGestureRecognizer) { 37 | switch gestureRecognizer.state { 38 | case .began: 39 | spring.stop() 40 | case .changed: 41 | draggableView.center = gestureRecognizer.location(in: view) 42 | spring.updateValue(to: draggableView.center) 43 | case .ended, .cancelled: 44 | spring.onValueChanged { [weak self] newValue in 45 | self?.draggableView.center = newValue 46 | } 47 | spring.velocity = gestureRecognizer.velocity(in: view) 48 | spring.toValue = view.center 49 | spring.start() 50 | default: 51 | break 52 | } 53 | } 54 | 55 | } 56 | 57 | import SwiftUI 58 | 59 | struct DraggableDemo: UIViewControllerRepresentable { 60 | 61 | func makeUIViewController(context: Context) -> some UIViewController { 62 | return DraggableViewController(nibName: nil, bundle: nil) 63 | } 64 | 65 | func updateUIViewController(_ uiViewController: UIViewControllerType, context: Context) { 66 | 67 | } 68 | 69 | } 70 | -------------------------------------------------------------------------------- /Example/MotionExample-iOS/MotionExample-iOS/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UIApplicationSceneManifest 24 | 25 | UIApplicationSupportsMultipleScenes 26 | 27 | UISceneConfigurations 28 | 29 | UIWindowSceneSessionRoleApplication 30 | 31 | 32 | UISceneConfigurationName 33 | Default Configuration 34 | UISceneDelegateClassName 35 | $(PRODUCT_MODULE_NAME).SceneDelegate 36 | UISceneStoryboardFile 37 | Main 38 | 39 | 40 | 41 | 42 | UIApplicationSupportsIndirectInputEvents 43 | 44 | UILaunchStoryboardName 45 | LaunchScreen 46 | UIMainStoryboardFile 47 | Main 48 | UIRequiredDeviceCapabilities 49 | 50 | armv7 51 | 52 | UISupportedInterfaceOrientations 53 | 54 | UIInterfaceOrientationPortrait 55 | UIInterfaceOrientationLandscapeLeft 56 | UIInterfaceOrientationLandscapeRight 57 | 58 | UISupportedInterfaceOrientations~ipad 59 | 60 | UIInterfaceOrientationPortrait 61 | UIInterfaceOrientationPortraitUpsideDown 62 | UIInterfaceOrientationLandscapeLeft 63 | UIInterfaceOrientationLandscapeRight 64 | 65 | CADisableMinimumFrameDurationOnPhone 66 | 67 | 68 | 69 | -------------------------------------------------------------------------------- /Example/MotionExample-iOS/MotionExample-iOS/SceneDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SceneDelegate.swift 3 | // MotionExample-iOS 4 | // 5 | // Created by Adam Bell on 8/25/20. 6 | // 7 | 8 | import UIKit 9 | 10 | class SceneDelegate: UIResponder, UIWindowSceneDelegate { 11 | 12 | var window: UIWindow? 13 | 14 | 15 | func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { 16 | // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. 17 | // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. 18 | // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). 19 | guard let _ = (scene as? UIWindowScene) else { return } 20 | } 21 | 22 | func sceneDidDisconnect(_ scene: UIScene) { 23 | // Called as the scene is being released by the system. 24 | // This occurs shortly after the scene enters the background, or when its session is discarded. 25 | // Release any resources associated with this scene that can be re-created the next time the scene connects. 26 | // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead). 27 | } 28 | 29 | func sceneDidBecomeActive(_ scene: UIScene) { 30 | // Called when the scene has moved from an inactive state to an active state. 31 | // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. 32 | } 33 | 34 | func sceneWillResignActive(_ scene: UIScene) { 35 | // Called when the scene will move from an active state to an inactive state. 36 | // This may occur due to temporary interruptions (ex. an incoming phone call). 37 | } 38 | 39 | func sceneWillEnterForeground(_ scene: UIScene) { 40 | // Called as the scene transitions from the background to the foreground. 41 | // Use this method to undo the changes made on entering the background. 42 | } 43 | 44 | func sceneDidEnterBackground(_ scene: UIScene) { 45 | // Called as the scene transitions from the foreground to the background. 46 | // Use this method to save data, release shared resources, and store enough scene-specific state information 47 | // to restore the scene back to its current state. 48 | } 49 | 50 | 51 | } 52 | 53 | -------------------------------------------------------------------------------- /Example/MotionExample-iOS/MotionExample-iOS/ScrollViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DecayViewController.swift 3 | // MotionExample-iOS 4 | // 5 | // Created by Adam Bell on 12/12/20. 6 | // 7 | 8 | import Motion 9 | import UIKit 10 | 11 | class ScrollViewController: UIViewController { 12 | 13 | let scrollView = CustomCustomScrollView(frame: .zero) 14 | let label = UILabel(frame: .zero) 15 | 16 | override func viewDidLoad() { 17 | super.viewDidLoad() 18 | 19 | label.font = UIFont.monospacedSystemFont(ofSize: 12.0, weight: .regular) 20 | label.text = try? String(contentsOfFile: Bundle.main.path(forResource: "ScrollViewContents", ofType: "txt")!) 21 | label.numberOfLines = 0 22 | 23 | scrollView.scrollsHorizontally = false 24 | scrollView.addSubview(label) 25 | 26 | view.addSubview(scrollView) 27 | } 28 | 29 | override func viewDidLayoutSubviews() { 30 | super.viewDidLayoutSubviews() 31 | 32 | label.frame.size = label.sizeThatFits(CGSize(width: view.bounds.size.width, height: .greatestFiniteMagnitude)) 33 | scrollView.frame = view.bounds 34 | scrollView.contentSize = CGSize(width: view.bounds.size.width, height: label.bounds.size.height) 35 | } 36 | 37 | } 38 | 39 | import SwiftUI 40 | 41 | struct ScrollViewDemo: UIViewControllerRepresentable { 42 | 43 | func makeUIViewController(context: Context) -> some UIViewController { 44 | return ScrollViewController(nibName: nil, bundle: nil) 45 | } 46 | 47 | func updateUIViewController(_ uiViewController: UIViewControllerType, context: Context) { 48 | 49 | } 50 | 51 | } 52 | -------------------------------------------------------------------------------- /Example/MotionExample-iOS/MotionExample-iOS/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // MotionExample-iOS 4 | // 5 | // Created by Adam Bell on 12/11/20. 6 | // 7 | 8 | import Foundation 9 | import UIKit 10 | import SwiftUI 11 | 12 | struct RootView: View { 13 | 14 | var body: some View { 15 | NavigationView { 16 | List { 17 | NavigationLink(destination: BouncyDemo().navigationTitle("Bouncy Demo")) { 18 | Text("Bouncy Demo") 19 | } 20 | NavigationLink(destination: DraggableDemo().navigationTitle("Dragging Demo")) { 21 | Text("Dragging Demo") 22 | } 23 | NavigationLink(destination: ScrollViewDemo().navigationTitle("ScrollView Demo")) { 24 | Text("ScrollView Demo") 25 | } 26 | NavigationLink(destination: SwiftUIDemoView().navigationTitle("SwiftUI Demo")) { 27 | Text("SwiftUI Demo") 28 | } 29 | } 30 | .navigationBarTitle("Motion Demos", displayMode: .large) 31 | } 32 | } 33 | 34 | } 35 | 36 | class ViewController: UIHostingController { 37 | 38 | @objc required dynamic init?(coder aDecoder: NSCoder) { 39 | super.init(rootView: RootView()) 40 | } 41 | 42 | } 43 | 44 | struct RootView_Previews: PreviewProvider { 45 | 46 | static var previews: some View { 47 | RootView() 48 | } 49 | 50 | } 51 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 2-Clause License 2 | 3 | Copyright (c) 2020, Adam Bell 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | 1. Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | 2. Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 19 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 20 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 22 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 23 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 | -------------------------------------------------------------------------------- /Package.resolved: -------------------------------------------------------------------------------- 1 | { 2 | "pins" : [ 3 | { 4 | "identity" : "swift-docc-plugin", 5 | "kind" : "remoteSourceControl", 6 | "location" : "https://github.com/apple/swift-docc-plugin", 7 | "state" : { 8 | "revision" : "26ac5758409154cc448d7ab82389c520fa8a8247", 9 | "version" : "1.3.0" 10 | } 11 | }, 12 | { 13 | "identity" : "swift-docc-symbolkit", 14 | "kind" : "remoteSourceControl", 15 | "location" : "https://github.com/apple/swift-docc-symbolkit", 16 | "state" : { 17 | "revision" : "b45d1f2ed151d057b54504d653e0da5552844e34", 18 | "version" : "1.0.0" 19 | } 20 | }, 21 | { 22 | "identity" : "swift-numerics", 23 | "kind" : "remoteSourceControl", 24 | "location" : "https://github.com/apple/swift-numerics", 25 | "state" : { 26 | "revision" : "0a5bc04095a675662cf24757cc0640aa2204253b", 27 | "version" : "1.0.2" 28 | } 29 | } 30 | ], 31 | "version" : 2 32 | } 33 | -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version:5.9 2 | // The swift-tools-version declares the minimum version of Swift required to build this package. 3 | 4 | import PackageDescription 5 | 6 | let package = Package( 7 | name: "Motion", 8 | platforms: [ 9 | .iOS(.v13), 10 | .tvOS(.v13), 11 | .macOS(.v10_14), 12 | .visionOS(.v1) 13 | ], 14 | products: [ 15 | // Products define the executables and libraries a package produces, and make them visible to other packages. 16 | .library( 17 | name: "Motion", 18 | targets: ["Motion"]), 19 | .library( 20 | name: "Graphing", 21 | targets: ["Graphing"]), 22 | ], 23 | dependencies: [ 24 | // Dependencies declare other packages that this package depends on. 25 | .package(url: "https://github.com/apple/swift-numerics", from: "1.0.0"), 26 | .package(url: "https://github.com/apple/swift-docc-plugin", from: "1.0.0"), 27 | ], 28 | targets: [ 29 | // Targets are the basic building blocks of a package. A target can define a module or a test suite. 30 | // Targets can depend on other targets in this package, and on products in packages this package depends on. 31 | .target( 32 | name: "Motion", 33 | dependencies: [ 34 | .product(name: "RealModule", package: "swift-numerics"), 35 | ]), 36 | .testTarget( 37 | name: "MotionTests", 38 | dependencies: ["Motion"]), 39 | .target( 40 | name: "Graphing", 41 | dependencies: [ 42 | "Motion", 43 | ]), 44 | ], 45 | swiftLanguageVersions: [.v5] 46 | ) 47 | -------------------------------------------------------------------------------- /Resources/MotionLogo-Dark-Cropped.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/Resources/MotionLogo-Dark-Cropped.gif -------------------------------------------------------------------------------- /Resources/MotionLogo-Dark.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/Resources/MotionLogo-Dark.gif -------------------------------------------------------------------------------- /Resources/MotionLogo-Dark.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/Resources/MotionLogo-Dark.mp4 -------------------------------------------------------------------------------- /Resources/MotionLogo-Light-Cropped.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/Resources/MotionLogo-Light-Cropped.gif -------------------------------------------------------------------------------- /Resources/MotionLogo-Light.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/Resources/MotionLogo-Light.gif -------------------------------------------------------------------------------- /Resources/MotionLogo-Light.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/Resources/MotionLogo-Light.mp4 -------------------------------------------------------------------------------- /Resources/MotionMovieMaker/MotionMovieMaker.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Resources/MotionMovieMaker/MotionMovieMaker.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Resources/MotionMovieMaker/MotionMovieMaker.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved: -------------------------------------------------------------------------------- 1 | { 2 | "pins" : [ 3 | { 4 | "identity" : "decomposed", 5 | "kind" : "remoteSourceControl", 6 | "location" : "https://github.com/b3ll/Decomposed", 7 | "state" : { 8 | "branch" : "main", 9 | "revision" : "225ec7726a70ae586a5e0d65b450551d4f15b298" 10 | } 11 | }, 12 | { 13 | "identity" : "swift-docc-plugin", 14 | "kind" : "remoteSourceControl", 15 | "location" : "https://github.com/apple/swift-docc-plugin", 16 | "state" : { 17 | "revision" : "10bc670db657d11bdd561e07de30a9041311b2b1", 18 | "version" : "1.1.0" 19 | } 20 | }, 21 | { 22 | "identity" : "swift-docc-symbolkit", 23 | "kind" : "remoteSourceControl", 24 | "location" : "https://github.com/apple/swift-docc-symbolkit", 25 | "state" : { 26 | "revision" : "b45d1f2ed151d057b54504d653e0da5552844e34", 27 | "version" : "1.0.0" 28 | } 29 | }, 30 | { 31 | "identity" : "swift-numerics", 32 | "kind" : "remoteSourceControl", 33 | "location" : "https://github.com/apple/swift-numerics", 34 | "state" : { 35 | "revision" : "0a5bc04095a675662cf24757cc0640aa2204253b", 36 | "version" : "1.0.2" 37 | } 38 | } 39 | ], 40 | "version" : 2 41 | } 42 | -------------------------------------------------------------------------------- /Resources/MotionMovieMaker/MotionMovieMaker/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // MotionMovieMaker 4 | // 5 | // Created by Adam Bell on 1/28/23. 6 | // 7 | 8 | import UIKit 9 | 10 | @main 11 | class AppDelegate: UIResponder, UIApplicationDelegate { 12 | 13 | // Run this with a iPad Pro Simulator for best results. 14 | 15 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 16 | // Override point for customization after application launch. 17 | return true 18 | } 19 | 20 | // MARK: UISceneSession Lifecycle 21 | 22 | func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { 23 | // Called when a new scene session is being created. 24 | // Use this method to select a configuration to create the new scene with. 25 | return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) 26 | } 27 | 28 | func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { 29 | // Called when the user discards a scene session. 30 | // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. 31 | // Use this method to release any resources that were specific to the discarded scenes, as they will not return. 32 | } 33 | 34 | 35 | } 36 | 37 | -------------------------------------------------------------------------------- /Resources/MotionMovieMaker/MotionMovieMaker/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Resources/MotionMovieMaker/MotionMovieMaker/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "platform" : "ios", 6 | "size" : "1024x1024" 7 | } 8 | ], 9 | "info" : { 10 | "author" : "xcode", 11 | "version" : 1 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Resources/MotionMovieMaker/MotionMovieMaker/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Resources/MotionMovieMaker/MotionMovieMaker/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /Resources/MotionMovieMaker/MotionMovieMaker/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /Resources/MotionMovieMaker/MotionMovieMaker/BouncyView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BouncyView.swift 3 | // MotionMovieMaker 4 | // 5 | // Created by Adam Bell on 1/28/23. 6 | // 7 | 8 | import Motion 9 | import UIKit 10 | 11 | public let MotionBlue = UIColor(red: 0.0/255.0, green: 212.0/255.0, blue: 255.0/255.0, alpha: 1.0) 12 | 13 | public class BouncyView: UIView { 14 | 15 | lazy var spring: SpringAnimation = { 16 | let animation = SpringAnimation(initialValue: 1.0) 17 | animation.configure(response: 0.4, dampingRatio: 0.4) 18 | animation.onValueChanged(disableActions: true) { [weak self] (newValue) in 19 | self?.layer.transform = CATransform3DMakeScale(newValue, newValue, 1.0) 20 | } 21 | return animation 22 | }() 23 | 24 | public override init(frame: CGRect) { 25 | super.init(frame: frame) 26 | 27 | self.backgroundColor = MotionBlue 28 | } 29 | 30 | required init?(coder: NSCoder) { 31 | fatalError("init(coder:) has not been implemented") 32 | } 33 | 34 | public override var bounds: CGRect { 35 | didSet { 36 | self.layer.cornerRadius = bounds.size.width / 2.0 37 | } 38 | } 39 | 40 | public override func touchesBegan(_ touches: Set, with event: UIEvent?) { 41 | super.touchesBegan(touches, with: event) 42 | 43 | spring.toValue = 0.5 44 | spring.start() 45 | } 46 | 47 | public override func touchesEnded(_ touches: Set, with event: UIEvent?) { 48 | super.touchesEnded(touches, with: event) 49 | 50 | spring.toValue = 1.0 51 | spring.velocity = 50.0 52 | spring.start() 53 | } 54 | 55 | public override func touchesCancelled(_ touches: Set, with event: UIEvent?) { 56 | super.touchesCancelled(touches, with: event) 57 | 58 | spring.toValue = 1.0 59 | spring.velocity = 0.0 60 | spring.start() 61 | } 62 | 63 | } 64 | -------------------------------------------------------------------------------- /Resources/MotionMovieMaker/MotionMovieMaker/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | UIApplicationSceneManifest 6 | 7 | UIApplicationSupportsMultipleScenes 8 | 9 | UISceneConfigurations 10 | 11 | UIWindowSceneSessionRoleApplication 12 | 13 | 14 | UISceneConfigurationName 15 | Default Configuration 16 | UISceneDelegateClassName 17 | $(PRODUCT_MODULE_NAME).SceneDelegate 18 | UISceneStoryboardFile 19 | Main 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /Resources/MotionMovieMaker/MotionMovieMaker/MotionMovieMaker-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // Use this file to import your target's public headers that you would like to expose to Swift. 3 | // 4 | -------------------------------------------------------------------------------- /Resources/MotionMovieMaker/MotionMovieMaker/SceneDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SceneDelegate.swift 3 | // MotionMovieMaker 4 | // 5 | // Created by Adam Bell on 1/28/23. 6 | // 7 | 8 | import UIKit 9 | 10 | class SceneDelegate: UIResponder, UIWindowSceneDelegate { 11 | 12 | var window: UIWindow? 13 | 14 | 15 | func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { 16 | // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. 17 | // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. 18 | // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). 19 | guard let _ = (scene as? UIWindowScene) else { return } 20 | } 21 | 22 | func sceneDidDisconnect(_ scene: UIScene) { 23 | // Called as the scene is being released by the system. 24 | // This occurs shortly after the scene enters the background, or when its session is discarded. 25 | // Release any resources associated with this scene that can be re-created the next time the scene connects. 26 | // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead). 27 | } 28 | 29 | func sceneDidBecomeActive(_ scene: UIScene) { 30 | // Called when the scene has moved from an inactive state to an active state. 31 | // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. 32 | } 33 | 34 | func sceneWillResignActive(_ scene: UIScene) { 35 | // Called when the scene will move from an active state to an inactive state. 36 | // This may occur due to temporary interruptions (ex. an incoming phone call). 37 | } 38 | 39 | func sceneWillEnterForeground(_ scene: UIScene) { 40 | // Called as the scene transitions from the background to the foreground. 41 | // Use this method to undo the changes made on entering the background. 42 | } 43 | 44 | func sceneDidEnterBackground(_ scene: UIScene) { 45 | // Called as the scene transitions from the foreground to the background. 46 | // Use this method to save data, release shared resources, and store enough scene-specific state information 47 | // to restore the scene back to its current state. 48 | } 49 | 50 | 51 | } 52 | 53 | -------------------------------------------------------------------------------- /Resources/deprecated/Motion-Logo-Rendered-Optimized~olde.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/Resources/deprecated/Motion-Logo-Rendered-Optimized~olde.gif -------------------------------------------------------------------------------- /Resources/deprecated/Motion-Logo-Rendered.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/Resources/deprecated/Motion-Logo-Rendered.gif -------------------------------------------------------------------------------- /Resources/deprecated/Motion-Logo-Rendered.m4v: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/Resources/deprecated/Motion-Logo-Rendered.m4v -------------------------------------------------------------------------------- /Resources/deprecated/Motion-Logo-Rendered~dark.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/Resources/deprecated/Motion-Logo-Rendered~dark.gif -------------------------------------------------------------------------------- /Resources/deprecated/Motion-Logo-Rendered~olde.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/Resources/deprecated/Motion-Logo-Rendered~olde.gif -------------------------------------------------------------------------------- /Resources/deprecated/MotionLogo-Dark-Cropped.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/Resources/deprecated/MotionLogo-Dark-Cropped.gif -------------------------------------------------------------------------------- /Resources/deprecated/MotionLogo-Dark.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/Resources/deprecated/MotionLogo-Dark.gif -------------------------------------------------------------------------------- /Resources/deprecated/MotionLogo-Light-Cropped.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/Resources/deprecated/MotionLogo-Light-Cropped.gif -------------------------------------------------------------------------------- /Resources/deprecated/MotionLogo-Light.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/Resources/deprecated/MotionLogo-Light.gif -------------------------------------------------------------------------------- /Resources/deprecated/render_files.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | rm MotionLogo-Light.gif 4 | rm MotionLogo-Light-Cropped.gif 5 | rm MotionLogo-Dark.gif 6 | rm MotionLogo-Dark-Cropped.gif 7 | 8 | gifski --fps 50 --extra --width 1920 --height 1080 -o MotionLogo-Light.gif MotionLogo-Light.mov 9 | 10 | gifsicle --crop 180,400+1560x280 --output MotionLogo-Light-Cropped.gif MotionLogo-Light.gif 11 | 12 | gifski --fps 50 --extra --width 1920 --height 1080 -o MotionLogo-Dark.gif MotionLogo-Dark.mov 13 | 14 | gifsicle --crop 180,400+1560x280 --output MotionLogo-Dark-Cropped.gif MotionLogo-Dark.gif 15 | -------------------------------------------------------------------------------- /Resources/render_files.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | rm -f MotionLogo-Light.mp4 || true 4 | rm -f MotionLogo-Light.gif || true 5 | rm -f MotionLogo-Light-Cropped.gif || true 6 | 7 | rm -f MotionLogo-Dark.mp4 || true 8 | rm -f MotionLogo-Dark.gif || true 9 | rm -f MotionLogo-Dark-Cropped.gif || true 10 | 11 | # light 12 | 13 | ffmpeg -r 60 -pattern_type glob -i "light/*.png" -c:v libx265 -x265-params lossless=1 MotionLogo-Light.mp4 14 | 15 | gifski --fps 50 --width 2732 --height 2048 --extra --quality 100 --motion-quality 100 --lossy-quality 100 --repeat 0 -o MotionLogo-Light.gif MotionLogo-Light.mp4 16 | 17 | gifsicle --crop 000,640+2732x768 --output MotionLogo-Light-Cropped.gif MotionLogo-Light.gif 18 | 19 | # dark 20 | 21 | ffmpeg -r 60 -pattern_type glob -i "dark/*.png" -c:v libx265 -x265-params lossless=1 MotionLogo-Dark.mp4 22 | 23 | gifski --fps 50 --width 2732 --height 2048 --extra --quality 100 --motion-quality 100 --lossy-quality 100 --repeat 0 -o MotionLogo-Dark.gif MotionLogo-Dark.mp4 24 | 25 | gifsicle --crop 000,640+2732x768 --output MotionLogo-Dark-Cropped.gif MotionLogo-Dark.gif 26 | -------------------------------------------------------------------------------- /Sources/Graphing/CurveGrapher.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EasingFunctionGraphView.swift 3 | // 4 | // 5 | // Created by Adam Bell on 8/28/20. 6 | // 7 | 8 | #if canImport(SwiftUI) 9 | 10 | import Motion 11 | import CoreGraphics 12 | import SwiftUI 13 | 14 | @available(iOS 14.0, macOS 11.0, tvOS 14.0, *) 15 | struct Graph_Previews: PreviewProvider { 16 | 17 | static var previews: some View { 18 | Group { 19 | ValueAnimationGraphView_Previews.previews 20 | EasingFunctionGraphView_Previews.previews 21 | } 22 | } 23 | 24 | } 25 | 26 | #endif 27 | -------------------------------------------------------------------------------- /Sources/Graphing/EasingFunctionGraph.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SwiftUIView.swift 3 | // 4 | // 5 | // Created by Adam Bell on 12/6/20. 6 | // 7 | 8 | #if canImport(SwiftUI) 9 | 10 | import Motion 11 | import SwiftUI 12 | 13 | @available(iOS 14.0, macOS 11.0, tvOS 14.0, *) 14 | public struct EasingFunctionShape: Shape { 15 | 16 | public let easingFunction: EasingFunction 17 | 18 | public init(_ easingFunction: EasingFunction) { 19 | self.easingFunction = easingFunction 20 | } 21 | 22 | public func path(in rect: CGRect) -> Path { 23 | let pointCount = rect.size.width * 3.0 24 | 25 | let points: [CGPoint] = stride(from: 0.0, to: pointCount, by: 1.0).map { (i) -> CGPoint in 26 | let percent = CGFloat(i) / CGFloat(pointCount) 27 | 28 | let minY = rect.size.height * 0.15 29 | let maxY = rect.size.height * 0.85 30 | 31 | let value = easingFunction.solveInterpolatedValue(minY...maxY, fraction: Double(percent)) 32 | 33 | return CGPoint(x: percent * rect.size.width, y: value) 34 | } 35 | 36 | var path = Path() 37 | path.addLines(points) 38 | return path 39 | } 40 | 41 | } 42 | 43 | public extension EasingFunction { 44 | 45 | static var allFunctions: [EasingFunction] { 46 | return [.linear, .easeIn, .easeOut, .easeInOut, Self(bezier: Bezier(x1: 0.42, y1: 0.0, x2: 0.58, y2: 1.0))] 47 | } 48 | 49 | } 50 | 51 | @available(iOS 14.0, macOS 11.0, tvOS 14.0, *) 52 | public struct EasingFunctionGraphView: View { 53 | 54 | public let easingFunction: EasingFunction 55 | 56 | public var body: some View { 57 | ZStack { 58 | Rectangle() 59 | .foregroundColor(.black) 60 | 61 | EasingFunctionShape(easingFunction) 62 | .stroke(lineWidth: 4.0) 63 | .foregroundColor(.blue) 64 | .padding(12.0) 65 | 66 | } 67 | .frame(width: 320.0, height: 320.0, alignment: /*@START_MENU_TOKEN@*/.center/*@END_MENU_TOKEN@*/) 68 | } 69 | 70 | } 71 | 72 | @available(iOS 14.0, macOS 11.0, tvOS 14.0, *) 73 | struct EasingFunctionGraphView_Previews: PreviewProvider { 74 | 75 | static var previews: some View { 76 | Group { 77 | ForEach(EasingFunction.allFunctions, id: \.self) { easingFunction in 78 | EasingFunctionGraphView(easingFunction: easingFunction) 79 | .previewLayout(.sizeThatFits) 80 | } 81 | } 82 | } 83 | 84 | } 85 | 86 | #endif 87 | -------------------------------------------------------------------------------- /Sources/Motion/Animations/AnimationGroup.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AnimationGroup.swift 3 | // 4 | // 5 | // Created by Adam Bell on 9/1/20. 6 | // 7 | 8 | import Foundation 9 | 10 | /** 11 | This class allows for grouping and running animations in parallel. 12 | 13 | - Note: I'm still debating whether or not this is needed. All animations run in parallel by default anyways, so this is just a more explicit grouping. 14 | It is largely untested / unfinished, and will most likely undergo a lot of changes to be useable. 15 | This class works assuming that all animations added to it are not started / stopped outside of this animation group, doing so is unsupported. 16 | */ 17 | public final class AnimationGroup: Animation { 18 | 19 | /// The animations that are to run as a group. 20 | let animations: [Animation] 21 | 22 | /** 23 | Initializes the animation group with an array of animations. 24 | 25 | - Parameters: 26 | - animations: The animations to run as a group. 27 | */ 28 | init(environment: AnimationEnvironment = .default, _ animations: Animation...) { 29 | self.animations = animations 30 | super.init(environment: environment) 31 | } 32 | 33 | /// Returns whether or not all of the animations have resolved. 34 | public override func hasResolved() -> Bool { 35 | return animations.reduce(true) { (result, animation) -> Bool in 36 | return result && animation.hasResolved() 37 | } 38 | } 39 | 40 | /// Starts the animation group. Animating each animation in the group sequentially each frame. 41 | public override func start() { 42 | animations.forEach { $0.stop() } 43 | 44 | self.enabled = true 45 | } 46 | 47 | /** 48 | Stops the animation group. 49 | 50 | - Parameters: 51 | - resolveImmediately: Whether or not all the animations should jump to their end value without animation. Defaults to `false`. 52 | - postValueChanged: If `true` is supplied for `resolveImmediately`, this controls whether not `valueChanged` will be called for each animation upon changing its value. 53 | */ 54 | public override func stop(resolveImmediately: Bool = false, postValueChanged: Bool = false) { 55 | if !resolveImmediately { 56 | super.stop() 57 | } else { 58 | self.enabled = false 59 | 60 | animations.forEach { $0.stop(resolveImmediately: resolveImmediately, postValueChanged: postValueChanged) } 61 | completion?() 62 | } 63 | } 64 | 65 | // MARK: - AnimationDriverObserver 66 | 67 | public override func tick(frame: AnimationFrame) { 68 | if frame.duration > 1.0 { 69 | return 70 | } 71 | 72 | animations.forEach { $0.tick(frame: frame) } 73 | 74 | if !hasResolved() { 75 | stop() 76 | completion?() 77 | } 78 | } 79 | 80 | } 81 | 82 | -------------------------------------------------------------------------------- /Sources/Motion/Documentation.docc/Resources/Motion-Logo-Rendered.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/Sources/Motion/Documentation.docc/Resources/Motion-Logo-Rendered.gif -------------------------------------------------------------------------------- /Sources/Motion/Documentation.docc/Resources/Motion-Logo-Rendered~dark.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/Sources/Motion/Documentation.docc/Resources/Motion-Logo-Rendered~dark.gif -------------------------------------------------------------------------------- /Sources/Motion/Protocols/AnimationEnvironment.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | #if os(macOS) 4 | import AppKit 5 | import CoreGraphics 6 | #else 7 | public typealias CGDirectDisplayID = UInt32 8 | #endif 9 | 10 | /** 11 | Adopted by types that can provide an ``Animator`` to drive Motion animations in a given environment. 12 | 13 | - Note: The animation environment is only relevant for native Mac apps. 14 | On iOS, you don't have to specify an animation environment and using ``AnimationEnvironment/default`` will always work. 15 | */ 16 | public protocol AnimationEnvironment: AnyObject { 17 | /// The ``Animator`` type to be used for animations in this environment. 18 | var animator: Animator { get } 19 | 20 | #if os(macOS) 21 | /// Identifier for the CoreGraphics display represented by this environment. 22 | var displayID: CGDirectDisplayID? { get } 23 | 24 | /// The preferred FPS for animations running in this environment. 25 | var preferredFramesPerSecond: Int { get } 26 | #endif 27 | } 28 | 29 | public extension AnimationEnvironment where Self == DefaultAnimationEnvironment { 30 | /** 31 | The default animation environment for the current device. 32 | 33 | On iOS, this will be the shared animator. 34 | 35 | On macOS, this will be the environment representing the main screen (`NSScreen.main`). 36 | 37 | - Warning: On macOS, you should always provide the most specific animation environment available 38 | when initializing an animation, such as the `NSView` where the animation will be rendered. 39 | Failing to do so may result in animations that don't use the optimal frame rate for the Mac's screen, 40 | or assertion failures in debug builds when an environment can't be inferred automatically. 41 | - SeeAlso: To learn more about environment specificity on macOS, see the documentation for ``AnimationEnvironmentProxy``. 42 | */ 43 | static var `default`: AnimationEnvironment { DefaultAnimationEnvironment.shared } 44 | } 45 | 46 | // MARK: - iOS Stubs 47 | 48 | #if canImport(UIKit) 49 | public extension AnimationEnvironment { 50 | var animator: Animator { Animator.shared } 51 | } 52 | 53 | public final class DefaultAnimationEnvironment: AnimationEnvironment { 54 | public static let shared = DefaultAnimationEnvironment() 55 | } 56 | #endif 57 | -------------------------------------------------------------------------------- /Sources/Motion/Utilities/CoreAnimationHelpers.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CoreAnimationHelpers.swift 3 | // 4 | // 5 | // Created by Adam Bell on 12/8/20. 6 | // 7 | 8 | import Foundation 9 | import QuartzCore 10 | 11 | /** 12 | Helper method to disable all implicitly created animations inside the supplied block. 13 | 14 | - Parameters: 15 | - block: The block that, when run, will have a new `CATransaction` created for it and will disable actions, which will be committed after the block completes. 16 | */ 17 | public func CADisableActions(_ block: () -> Void) { 18 | CATransaction.begin() 19 | CATransaction.setDisableActions(true) 20 | 21 | block() 22 | 23 | CATransaction.commit() 24 | } 25 | 26 | public extension CALayer { 27 | 28 | /** 29 | Adds a supported animation conforming to `CAKeyframeAnimationEmittable` to a given `CALayer`. 30 | 31 | This method generates a pre-configured `CAKeyframeAnimation` from the supplied animation and adds it to the supplied layer, animating the given key path. 32 | 33 | - Parameters: 34 | - animation: An animation that conforms to `CAKeyframeAnimationEmittable`. 35 | - key: The key to be associated with the generated `CAKeyframeAnimation` when added to the layer. 36 | - keyPath: The key path to animate. The key path is relative to the layer. 37 | */ 38 | func add(_ animation: CAKeyframeAnimationEmittable, forKey key: String, keyPath: String) { 39 | if keyPath.isEmpty { 40 | assertionFailure("The keyPath must not be nil.") 41 | return 42 | } 43 | 44 | let keyframeAnimation = animation.keyframeAnimation(forFramerate: nil) 45 | keyframeAnimation.keyPath = keyPath 46 | add(keyframeAnimation, forKey: key) 47 | } 48 | 49 | } 50 | -------------------------------------------------------------------------------- /Sources/Motion/Utilities/NSScreen+AnimationEnvironment.swift: -------------------------------------------------------------------------------- 1 | #if os(macOS) 2 | import AppKit 3 | 4 | public final class DefaultAnimationEnvironment: NSScreen { 5 | public static var shared: AnimationEnvironment { 6 | guard let screen = NSScreen.main ?? NSScreen.screens.first else { 7 | fatalError("Motion can't run because this Mac doesn't have a screen") 8 | } 9 | return screen 10 | } 11 | } 12 | 13 | extension NSScreen: AnimationEnvironment { 14 | private var environmentStorage: AnimationEnvironmentStorage { AnimationEnvironmentStorage.shared } 15 | 16 | public var animator: Animator { environmentStorage.animator(for: self) } 17 | 18 | public var displayID: CGDirectDisplayID? { 19 | guard let number = deviceDescription[.screenNumber] as? NSNumber else { 20 | assertionFailure("NSScreenNumber for \(self) is not an NSNumber") 21 | return nil 22 | } 23 | return number.uint32Value 24 | } 25 | 26 | public var preferredFramesPerSecond: Int { 27 | guard #available(macOS 12.0, *) else { return 60 } 28 | let fps = maximumFramesPerSecond 29 | guard fps > 0 else { return 60 } 30 | return fps 31 | } 32 | } 33 | 34 | private extension NSDeviceDescriptionKey { 35 | static let screenNumber = NSDeviceDescriptionKey("NSScreenNumber") 36 | } 37 | 38 | private final class AnimationEnvironmentStorage { 39 | static let shared = AnimationEnvironmentStorage() 40 | 41 | private var animatorsByDisplayID = [CGDirectDisplayID: Animator]() 42 | 43 | func animator(for screen: NSScreen) -> Animator { 44 | guard let displayID = screen.displayID else { 45 | fatalError("Motion failed to get the CGDirectDisplayID for screen \(screen)") 46 | } 47 | 48 | if let existingAnimator = animatorsByDisplayID[displayID] { 49 | return existingAnimator 50 | } else { 51 | let newAnimator = Animator(environment: screen) 52 | animatorsByDisplayID[displayID] = newAnimator 53 | return newAnimator 54 | } 55 | } 56 | } 57 | #endif 58 | -------------------------------------------------------------------------------- /Sources/Motion/Utilities/RubberBanding.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RubberBanding.swift 3 | // 4 | // 5 | // Created by Adam Bell on 8/27/20. 6 | // 7 | 8 | import Foundation 9 | import QuartzCore 10 | 11 | /// The standard rubberbanding constant for `UIScrollView`. 12 | public let UIScrollViewRubberBandingConstant = 0.55 13 | 14 | /** 15 | Rubberbands a floating point value based on a given coefficient and range. 16 | 17 | - Parameters: 18 | - value: The floating point value to rubberband. 19 | - coefficient: A multiplier to decay the value when it's being rubberbanded. Defaults to `UIScrollViewRubberBandingConstant`. 20 | - boundsSize: The viewport dimension (i.e. the bounds along the axis of a scroll view)). 21 | - contentSize: The size of the content over which the value won't rubberband (i.e. the contentSize along the axis of a scroll view). 22 | 23 | ``` 24 | bounds.origin.x = rubberband(bounds.origin.x - translation.x, boundsSize: bounds.size.width, contentSize: contentSize.width) 25 | ``` 26 | 27 | - Note: See `CustomCustomScrollView` in the example project for more a more complete example on how to use this. 28 | */ 29 | public func rubberband(_ value: Value, coefficient: Value = Value(UIScrollViewRubberBandingConstant), boundsSize: Value, contentSize: Value) -> Value { 30 | var exceededContentsPositively = false 31 | let x: Value 32 | if (value + boundsSize) > contentSize { 33 | x = abs(contentSize - boundsSize - value) 34 | exceededContentsPositively = true 35 | } else if value < 0.0 { 36 | x = -value 37 | } else { 38 | return value 39 | } 40 | 41 | // (1.0 - (1.0 / ((x * c / d) + 1.0))) * d 42 | 43 | // Without this, the swift type checker is super slow. 44 | let x1 = (x * coefficient / boundsSize) + 1.0 45 | 46 | let rubberBandedAmount = ((1.0 - (1.0 / x1)) * boundsSize) 47 | 48 | // We're beyond the range 49 | if exceededContentsPositively { 50 | return rubberBandedAmount + contentSize - boundsSize 51 | } else { // We're beyond the range in the opposite direction 52 | return -rubberBandedAmount 53 | } 54 | } 55 | 56 | // TODO: SIMD variants at some point. It's kinda tricky. 57 | -------------------------------------------------------------------------------- /Sources/Motion/Utilities/Synchronized.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | final class Synchronized { 4 | private var data: Wrapped 5 | private var lock = NSLock() 6 | 7 | init(data: Wrapped) { 8 | self.data = data 9 | } 10 | 11 | var value: Wrapped { 12 | get { 13 | with { data in 14 | data 15 | } 16 | } 17 | set { 18 | with { data in 19 | data = newValue 20 | } 21 | } 22 | } 23 | 24 | func with(_ body: (inout Wrapped) throws -> T) rethrows -> T { 25 | lock.lock() 26 | defer { lock.unlock() } 27 | return try body(&self.data) 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Tests/LinuxMain.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | 3 | import MotionTests 4 | 5 | var tests = [XCTestCaseEntry]() 6 | tests += MotionTests.allTests() 7 | XCTMain(tests) 8 | -------------------------------------------------------------------------------- /build_docs.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | swift package --allow-writing-to-directory docs generate-documentation --target Motion --disable-indexing --transform-for-static-hosting --hosting-base-path Motion --output-path docs 4 | swift package --disable-sandbox preview-documentation --target Motion 5 | -------------------------------------------------------------------------------- /build_xcframework.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | pushd "$( dirname -- "$0"; )" 4 | 5 | rm -rf build/output 6 | rm -rf Motion.zip 7 | 8 | mkdir -p build 9 | 10 | git clone https://github.com/giginet/Scipio.git build/scipio 11 | 12 | pushd build/scipio 13 | 14 | swift run -c release scipio create ../../ --enable-library-evolution --support-simulators --only-use-versions-from-resolved-file --output ../output --verbose 15 | 16 | zip -r ../../Motion.zip ../output/Motion.xcframework 17 | 18 | popd 19 | popd 20 | -------------------------------------------------------------------------------- /docs/data/documentation/motion/animation/enableddidchange.json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"enabledDidChange"},{"kind":"text","text":": ("},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Void","preciseIdentifier":"s:s4Voida"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/animation\/enableddidchange"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/Animation\/enabledDidChange","interfaceLanguage":"swift"},"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"enabledDidChange"},{"kind":"text","text":": ("},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Void","preciseIdentifier":"s:s4Voida"}],"title":"enabledDidChange","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:6Motion9AnimationC16enabledDidChangeyySbcvp","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/Animation"]]},"references":{"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/Animation/enabledDidChange":{"role":"symbol","title":"enabledDidChange","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"enabledDidChange"},{"kind":"text","text":": ("},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Void","preciseIdentifier":"s:s4Voida"}],"abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Animation\/enabledDidChange","kind":"symbol","type":"topic","url":"\/documentation\/motion\/animation\/enableddidchange"},"doc://Motion/documentation/Motion/Animation":{"role":"symbol","title":"Animation","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"Animation"}],"abstract":[{"type":"text","text":"This class acts as the base class for all animations within "},{"type":"codeVoice","code":"Motion"},{"type":"text","text":". It doesn’t do much, other than serve as a base class for all animations to inherit from and implement."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Animation","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Animation"}],"url":"\/documentation\/motion\/animation"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/animation/hasresolved().json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hasResolved"},{"kind":"text","text":"() -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/animation\/hasresolved()"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/Animation\/hasResolved()","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Determines whether or not the animation should be considered resolved, or at rest."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hasResolved"},{"kind":"text","text":"() -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"title":"hasResolved()","roleHeading":"Instance Method","role":"symbol","symbolKind":"method","externalID":"s:6Motion9AnimationC11hasResolvedSbyF","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/Animation"]]},"references":{"doc://Motion/documentation/Motion/Animation/hasResolved()":{"role":"symbol","title":"hasResolved()","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hasResolved"},{"kind":"text","text":"() -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[{"type":"text","text":"Determines whether or not the animation should be considered resolved, or at rest."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Animation\/hasResolved()","kind":"symbol","type":"topic","url":"\/documentation\/motion\/animation\/hasresolved()"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/Animation":{"role":"symbol","title":"Animation","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"Animation"}],"abstract":[{"type":"text","text":"This class acts as the base class for all animations within "},{"type":"codeVoice","code":"Motion"},{"type":"text","text":". It doesn’t do much, other than serve as a base class for all animations to inherit from and implement."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Animation","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Animation"}],"url":"\/documentation\/motion\/animation"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/animation/init().json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"init"},{"kind":"text","text":"()"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/animation\/init()"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/Animation\/init()","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Default initializer. Animations must be strongly held to continue to animate."}],"kind":"symbol","metadata":{"fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"()"}],"title":"init()","roleHeading":"Initializer","role":"symbol","symbolKind":"init","externalID":"s:6Motion9AnimationCACycfc","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/Animation"]]},"references":{"doc://Motion/documentation/Motion/Animation":{"role":"symbol","title":"Animation","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"Animation"}],"abstract":[{"type":"text","text":"This class acts as the base class for all animations within "},{"type":"codeVoice","code":"Motion"},{"type":"text","text":". It doesn’t do much, other than serve as a base class for all animations to inherit from and implement."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Animation","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Animation"}],"url":"\/documentation\/motion\/animation"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/Animation/init()":{"role":"symbol","title":"init()","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"()"}],"abstract":[{"type":"text","text":"Default initializer. Animations must be strongly held to continue to animate."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Animation\/init()","kind":"symbol","type":"topic","url":"\/documentation\/motion\/animation\/init()"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/animation/start().json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"start"},{"kind":"text","text":"()"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/animation\/start()"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/Animation\/start()","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Starts the animation if "},{"type":"codeVoice","code":"hasResolved"},{"type":"text","text":" is false."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"start"},{"kind":"text","text":"()"}],"title":"start()","roleHeading":"Instance Method","role":"symbol","symbolKind":"method","externalID":"s:6Motion9AnimationC5startyyF","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/Animation"]]},"references":{"doc://Motion/documentation/Motion/Animation":{"role":"symbol","title":"Animation","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"Animation"}],"abstract":[{"type":"text","text":"This class acts as the base class for all animations within "},{"type":"codeVoice","code":"Motion"},{"type":"text","text":". It doesn’t do much, other than serve as a base class for all animations to inherit from and implement."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Animation","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Animation"}],"url":"\/documentation\/motion\/animation"},"doc://Motion/documentation/Motion/Animation/start()":{"role":"symbol","title":"start()","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"start"},{"kind":"text","text":"()"}],"abstract":[{"type":"text","text":"Starts the animation if "},{"type":"codeVoice","code":"hasResolved"},{"type":"text","text":" is false."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Animation\/start()","kind":"symbol","type":"topic","url":"\/documentation\/motion\/animation\/start()"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/animationframe/duration.json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"duration"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"CFTimeInterval","preciseIdentifier":"c:@T@CFTimeInterval"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/animationframe\/duration"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/AnimationFrame\/duration","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The current duration between last frame and target frame."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"duration"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"CFTimeInterval","preciseIdentifier":"c:@T@CFTimeInterval"}],"title":"duration","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:6Motion14AnimationFrameV8durationSdvp","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/AnimationFrame"]]},"references":{"doc://Motion/documentation/Motion/AnimationFrame":{"role":"symbol","title":"AnimationFrame","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"AnimationFrame"}],"abstract":[{"type":"text","text":"Timestamps for the current animation frame."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/AnimationFrame","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"AnimationFrame"}],"url":"\/documentation\/motion\/animationframe"},"doc://Motion/documentation/Motion/AnimationFrame/duration":{"role":"symbol","title":"duration","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"duration"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"CFTimeInterval","preciseIdentifier":"c:@T@CFTimeInterval"}],"abstract":[{"type":"text","text":"The current duration between last frame and target frame."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/AnimationFrame\/duration","kind":"symbol","type":"topic","url":"\/documentation\/motion\/animationframe\/duration"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/animationframe/equatable-implementations.json: -------------------------------------------------------------------------------- 1 | {"variants":[{"paths":["\/documentation\/motion\/animationframe\/equatable-implementations"],"traits":[{"interfaceLanguage":"swift"}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/AnimationFrame\/Equatable-Implementations","interfaceLanguage":"swift"},"topicSections":[{"title":"Operators","identifiers":["doc:\/\/Motion\/documentation\/Motion\/AnimationFrame\/!=(_:_:)"],"generated":true}],"kind":"article","metadata":{"modules":[{"name":"Motion"}],"role":"collectionGroup","title":"Equatable Implementations"},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/AnimationFrame"]]},"references":{"doc://Motion/documentation/Motion/AnimationFrame":{"role":"symbol","title":"AnimationFrame","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"AnimationFrame"}],"abstract":[{"type":"text","text":"Timestamps for the current animation frame."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/AnimationFrame","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"AnimationFrame"}],"url":"\/documentation\/motion\/animationframe"},"doc://Motion/documentation/Motion/AnimationFrame/!=(_:_:)":{"role":"symbol","title":"!=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion\/AnimationFrame\/!=(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/motion\/animationframe\/!=(_:_:)"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/animationframe/init(_:).json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"_"},{"kind":"text","text":" "},{"kind":"internalParam","text":"dt"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"CFTimeInterval","preciseIdentifier":"c:@T@CFTimeInterval"},{"kind":"text","text":")"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/animationframe\/init(_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/AnimationFrame\/init(_:)","interfaceLanguage":"swift"},"kind":"symbol","metadata":{"fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"CFTimeInterval","preciseIdentifier":"c:@T@CFTimeInterval"},{"kind":"text","text":")"}],"title":"init(_:)","roleHeading":"Initializer","role":"symbol","symbolKind":"init","externalID":"s:6Motion14AnimationFrameVyACSdcfc","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/AnimationFrame"]]},"references":{"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/AnimationFrame":{"role":"symbol","title":"AnimationFrame","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"AnimationFrame"}],"abstract":[{"type":"text","text":"Timestamps for the current animation frame."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/AnimationFrame","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"AnimationFrame"}],"url":"\/documentation\/motion\/animationframe"},"doc://Motion/documentation/Motion/AnimationFrame/init(_:)":{"role":"symbol","title":"init(_:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"CFTimeInterval","preciseIdentifier":"c:@T@CFTimeInterval"},{"kind":"text","text":")"}],"abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion\/AnimationFrame\/init(_:)","kind":"symbol","type":"topic","url":"\/documentation\/motion\/animationframe\/init(_:)"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/animationframe/targettimestamp.json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"targetTimestamp"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"CFTimeInterval","preciseIdentifier":"c:@T@CFTimeInterval"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/animationframe\/targettimestamp"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/AnimationFrame\/targetTimestamp","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The timestamp that represents when the next frame displays."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"targetTimestamp"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"CFTimeInterval","preciseIdentifier":"c:@T@CFTimeInterval"}],"title":"targetTimestamp","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:6Motion14AnimationFrameV15targetTimestampSdvp","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/AnimationFrame"]]},"references":{"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/AnimationFrame":{"role":"symbol","title":"AnimationFrame","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"AnimationFrame"}],"abstract":[{"type":"text","text":"Timestamps for the current animation frame."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/AnimationFrame","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"AnimationFrame"}],"url":"\/documentation\/motion\/animationframe"},"doc://Motion/documentation/Motion/AnimationFrame/targetTimestamp":{"role":"symbol","title":"targetTimestamp","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"targetTimestamp"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"CFTimeInterval","preciseIdentifier":"c:@T@CFTimeInterval"}],"abstract":[{"type":"text","text":"The timestamp that represents when the next frame displays."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/AnimationFrame\/targetTimestamp","kind":"symbol","type":"topic","url":"\/documentation\/motion\/animationframe\/targettimestamp"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/animationframe/timestamp.json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"timestamp"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"CFTimeInterval","preciseIdentifier":"c:@T@CFTimeInterval"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/animationframe\/timestamp"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/AnimationFrame\/timestamp","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The timestamp that the frame started."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"timestamp"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"CFTimeInterval","preciseIdentifier":"c:@T@CFTimeInterval"}],"title":"timestamp","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:6Motion14AnimationFrameV9timestampSdvp","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/AnimationFrame"]]},"references":{"doc://Motion/documentation/Motion/AnimationFrame":{"role":"symbol","title":"AnimationFrame","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"AnimationFrame"}],"abstract":[{"type":"text","text":"Timestamps for the current animation frame."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/AnimationFrame","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"AnimationFrame"}],"url":"\/documentation\/motion\/animationframe"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/AnimationFrame/timestamp":{"role":"symbol","title":"timestamp","fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"timestamp"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"CFTimeInterval","preciseIdentifier":"c:@T@CFTimeInterval"}],"abstract":[{"type":"text","text":"The timestamp that the frame started."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/AnimationFrame\/timestamp","kind":"symbol","type":"topic","url":"\/documentation\/motion\/animationframe\/timestamp"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/animationgroup/hasresolved().json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"override"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hasResolved"},{"kind":"text","text":"() -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/animationgroup\/hasresolved()"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/AnimationGroup\/hasResolved()","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Returns whether or not all of the animations have resolved."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hasResolved"},{"kind":"text","text":"() -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"title":"hasResolved()","roleHeading":"Instance Method","role":"symbol","symbolKind":"method","externalID":"s:6Motion14AnimationGroupC11hasResolvedSbyF","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/AnimationGroup"]]},"references":{"doc://Motion/documentation/Motion/AnimationGroup":{"role":"symbol","title":"AnimationGroup","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"AnimationGroup"}],"abstract":[{"type":"text","text":"This class allows for grouping and running animations in parallel."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/AnimationGroup","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"AnimationGroup"}],"url":"\/documentation\/motion\/animationgroup"},"doc://Motion/documentation/Motion/AnimationGroup/hasResolved()":{"role":"symbol","title":"hasResolved()","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hasResolved"},{"kind":"text","text":"() -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[{"type":"text","text":"Returns whether or not all of the animations have resolved."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/AnimationGroup\/hasResolved()","kind":"symbol","type":"topic","url":"\/documentation\/motion\/animationgroup\/hasresolved()"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/animationgroup/start().json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"override"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"start"},{"kind":"text","text":"()"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/animationgroup\/start()"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/AnimationGroup\/start()","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Starts the animation group. Animating each animation in the group sequentially each frame."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"start"},{"kind":"text","text":"()"}],"title":"start()","roleHeading":"Instance Method","role":"symbol","symbolKind":"method","externalID":"s:6Motion14AnimationGroupC5startyyF","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/AnimationGroup"]]},"references":{"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/AnimationGroup/start()":{"role":"symbol","title":"start()","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"start"},{"kind":"text","text":"()"}],"abstract":[{"type":"text","text":"Starts the animation group. Animating each animation in the group sequentially each frame."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/AnimationGroup\/start()","kind":"symbol","type":"topic","url":"\/documentation\/motion\/animationgroup\/start()"},"doc://Motion/documentation/Motion/AnimationGroup":{"role":"symbol","title":"AnimationGroup","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"AnimationGroup"}],"abstract":[{"type":"text","text":"This class allows for grouping and running animations in parallel."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/AnimationGroup","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"AnimationGroup"}],"url":"\/documentation\/motion\/animationgroup"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/basicanimation/duration.json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"duration"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"CFTimeInterval","preciseIdentifier":"c:@T@CFTimeInterval"}],"languages":["swift"],"platforms":["macOS"]}]},{"kind":"content","content":[{"anchor":"discussion","level":2,"type":"heading","text":"Discussion"},{"type":"aside","style":"note","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"Supplying negative values here"}]}]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/basicanimation\/duration"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/BasicAnimation\/duration","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"How long, in seconds, the animation should take."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"duration"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"CFTimeInterval","preciseIdentifier":"c:@T@CFTimeInterval"}],"title":"duration","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:6Motion14BasicAnimationC8durationSdvp","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/BasicAnimation"]]},"references":{"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/BasicAnimation":{"role":"symbol","title":"BasicAnimation","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"BasicAnimation"}],"abstract":[{"type":"text","text":"This class provides the ability to animate types that conform to "},{"type":"codeVoice","code":"Value"},{"type":"text","text":" based on basic curves (i.e. "},{"type":"codeVoice","code":"EasingFunction.easeIn"},{"type":"text","text":", "},{"type":"codeVoice","code":"EasingFunction.easeInOut"},{"type":"text","text":", etc.)."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/BasicAnimation","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"BasicAnimation"}],"url":"\/documentation\/motion\/basicanimation"},"doc://Motion/documentation/Motion/BasicAnimation/duration":{"role":"symbol","title":"duration","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"duration"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"CFTimeInterval","preciseIdentifier":"c:@T@CFTimeInterval"}],"abstract":[{"type":"text","text":"How long, in seconds, the animation should take."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/BasicAnimation\/duration","kind":"symbol","type":"topic","url":"\/documentation\/motion\/basicanimation\/duration"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/basicanimation/fromvalue.json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"fromValue"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" "},{"kind":"keyword","text":"set"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/basicanimation\/fromvalue"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/BasicAnimation\/fromValue","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The starting point of the animation. Defaults to "},{"type":"codeVoice","code":".zero"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"fromValue"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"}],"title":"fromValue","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:6Motion14BasicAnimationC9fromValuexvp","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/BasicAnimation"]]},"references":{"doc://Motion/documentation/Motion/BasicAnimation/fromValue":{"role":"symbol","title":"fromValue","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"fromValue"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"}],"abstract":[{"type":"text","text":"The starting point of the animation. Defaults to "},{"type":"codeVoice","code":".zero"},{"type":"text","text":"."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/BasicAnimation\/fromValue","kind":"symbol","type":"topic","url":"\/documentation\/motion\/basicanimation\/fromvalue"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/BasicAnimation":{"role":"symbol","title":"BasicAnimation","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"BasicAnimation"}],"abstract":[{"type":"text","text":"This class provides the ability to animate types that conform to "},{"type":"codeVoice","code":"Value"},{"type":"text","text":" based on basic curves (i.e. "},{"type":"codeVoice","code":"EasingFunction.easeIn"},{"type":"text","text":", "},{"type":"codeVoice","code":"EasingFunction.easeInOut"},{"type":"text","text":", etc.)."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/BasicAnimation","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"BasicAnimation"}],"url":"\/documentation\/motion\/basicanimation"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/basicanimation/hasresolved().json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"override"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hasResolved"},{"kind":"text","text":"() -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/basicanimation\/hasresolved()"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/BasicAnimation\/hasResolved()","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Returns whether or not this animation has resolved."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hasResolved"},{"kind":"text","text":"() -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"title":"hasResolved()","roleHeading":"Instance Method","role":"symbol","symbolKind":"method","externalID":"s:6Motion14BasicAnimationC11hasResolvedSbyF","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/BasicAnimation"]]},"references":{"doc://Motion/documentation/Motion/BasicAnimation/hasResolved()":{"role":"symbol","title":"hasResolved()","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hasResolved"},{"kind":"text","text":"() -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[{"type":"text","text":"Returns whether or not this animation has resolved."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/BasicAnimation\/hasResolved()","kind":"symbol","type":"topic","url":"\/documentation\/motion\/basicanimation\/hasresolved()"},"doc://Motion/documentation/Motion/BasicAnimation":{"role":"symbol","title":"BasicAnimation","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"BasicAnimation"}],"abstract":[{"type":"text","text":"This class provides the ability to animate types that conform to "},{"type":"codeVoice","code":"Value"},{"type":"text","text":" based on basic curves (i.e. "},{"type":"codeVoice","code":"EasingFunction.easeIn"},{"type":"text","text":", "},{"type":"codeVoice","code":"EasingFunction.easeInOut"},{"type":"text","text":", etc.)."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/BasicAnimation","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"BasicAnimation"}],"url":"\/documentation\/motion\/basicanimation"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/basicanimation/start().json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"override"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"start"},{"kind":"text","text":"()"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/basicanimation\/start()"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/BasicAnimation\/start()","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"Animation.start()"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"start"},{"kind":"text","text":"()"}],"title":"start()","roleHeading":"Instance Method","role":"symbol","symbolKind":"method","externalID":"s:6Motion14BasicAnimationC5startyyF","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/BasicAnimation"]]},"references":{"doc://Motion/documentation/Motion/BasicAnimation":{"role":"symbol","title":"BasicAnimation","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"BasicAnimation"}],"abstract":[{"type":"text","text":"This class provides the ability to animate types that conform to "},{"type":"codeVoice","code":"Value"},{"type":"text","text":" based on basic curves (i.e. "},{"type":"codeVoice","code":"EasingFunction.easeIn"},{"type":"text","text":", "},{"type":"codeVoice","code":"EasingFunction.easeInOut"},{"type":"text","text":", etc.)."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/BasicAnimation","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"BasicAnimation"}],"url":"\/documentation\/motion\/basicanimation"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/BasicAnimation/start()":{"role":"symbol","title":"start()","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"start"},{"kind":"text","text":"()"}],"abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion\/BasicAnimation\/start()","kind":"symbol","type":"topic","url":"\/documentation\/motion\/basicanimation\/start()"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/bezier/equatable-implementations.json: -------------------------------------------------------------------------------- 1 | {"variants":[{"paths":["\/documentation\/motion\/bezier\/equatable-implementations"],"traits":[{"interfaceLanguage":"swift"}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/Bezier\/Equatable-Implementations","interfaceLanguage":"swift"},"topicSections":[{"title":"Operators","identifiers":["doc:\/\/Motion\/documentation\/Motion\/Bezier\/!=(_:_:)"],"generated":true}],"kind":"article","metadata":{"modules":[{"name":"Motion"}],"role":"collectionGroup","title":"Equatable Implementations"},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/Bezier"]]},"references":{"doc://Motion/documentation/Motion/Bezier":{"role":"symbol","title":"Bezier","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Bezier"}],"abstract":[{"type":"text","text":"A Swift adaptation of UnitBezier from WebKit: https:\/\/opensource.apple.com\/source\/WebCore\/WebCore-955.66\/platform\/graphics\/UnitBezier.h"}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Bezier","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Bezier"}],"url":"\/documentation\/motion\/bezier"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/Bezier/!=(_:_:)":{"role":"symbol","title":"!=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Bezier\/!=(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/motion\/bezier\/!=(_:_:)"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/bezier/evaluatecurvex(t:).json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"evaluateCurveX"},{"kind":"text","text":"("},{"kind":"externalParam","text":"t"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Scalar"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Scalar"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/bezier\/evaluatecurvex(t:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/Bezier\/evaluateCurveX(t:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Evaluates "},{"type":"codeVoice","code":"x(t)"},{"type":"text","text":" for the bezier curve function."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"evaluateCurveX"},{"kind":"text","text":"("},{"kind":"externalParam","text":"t"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Scalar"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Scalar"}],"title":"evaluateCurveX(t:)","roleHeading":"Instance Method","role":"symbol","symbolKind":"method","externalID":"s:6Motion6BezierV14evaluateCurveX1txx_tF","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/Bezier"]]},"references":{"doc://Motion/documentation/Motion/Bezier":{"role":"symbol","title":"Bezier","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Bezier"}],"abstract":[{"type":"text","text":"A Swift adaptation of UnitBezier from WebKit: https:\/\/opensource.apple.com\/source\/WebCore\/WebCore-955.66\/platform\/graphics\/UnitBezier.h"}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Bezier","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Bezier"}],"url":"\/documentation\/motion\/bezier"},"doc://Motion/documentation/Motion/Bezier/evaluateCurveX(t:)":{"role":"symbol","title":"evaluateCurveX(t:)","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"evaluateCurveX"},{"kind":"text","text":"("},{"kind":"externalParam","text":"t"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Scalar"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Scalar"}],"abstract":[{"type":"text","text":"Evaluates "},{"type":"codeVoice","code":"x(t)"},{"type":"text","text":" for the bezier curve function."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Bezier\/evaluateCurveX(t:)","kind":"symbol","type":"topic","url":"\/documentation\/motion\/bezier\/evaluatecurvex(t:)"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/bezier/evaluatecurvey(t:).json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"evaluateCurveY"},{"kind":"text","text":"("},{"kind":"externalParam","text":"t"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Scalar"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Scalar"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/bezier\/evaluatecurvey(t:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/Bezier\/evaluateCurveY(t:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Evaluates "},{"type":"codeVoice","code":"y(t)"},{"type":"text","text":" for the bezier curve function."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"evaluateCurveY"},{"kind":"text","text":"("},{"kind":"externalParam","text":"t"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Scalar"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Scalar"}],"title":"evaluateCurveY(t:)","roleHeading":"Instance Method","role":"symbol","symbolKind":"method","externalID":"s:6Motion6BezierV14evaluateCurveY1txx_tF","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/Bezier"]]},"references":{"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/Bezier/evaluateCurveY(t:)":{"role":"symbol","title":"evaluateCurveY(t:)","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"evaluateCurveY"},{"kind":"text","text":"("},{"kind":"externalParam","text":"t"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Scalar"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Scalar"}],"abstract":[{"type":"text","text":"Evaluates "},{"type":"codeVoice","code":"y(t)"},{"type":"text","text":" for the bezier curve function."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Bezier\/evaluateCurveY(t:)","kind":"symbol","type":"topic","url":"\/documentation\/motion\/bezier\/evaluatecurvey(t:)"},"doc://Motion/documentation/Motion/Bezier":{"role":"symbol","title":"Bezier","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Bezier"}],"abstract":[{"type":"text","text":"A Swift adaptation of UnitBezier from WebKit: https:\/\/opensource.apple.com\/source\/WebCore\/WebCore-955.66\/platform\/graphics\/UnitBezier.h"}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Bezier","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Bezier"}],"url":"\/documentation\/motion\/bezier"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/bezier/x1.json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"x1"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Scalar"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/bezier\/x1"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/Bezier\/x1","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The x value of the first point."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"x1"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Scalar"}],"title":"x1","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:6Motion6BezierV2x1xvp","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/Bezier"]]},"references":{"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/Bezier":{"role":"symbol","title":"Bezier","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Bezier"}],"abstract":[{"type":"text","text":"A Swift adaptation of UnitBezier from WebKit: https:\/\/opensource.apple.com\/source\/WebCore\/WebCore-955.66\/platform\/graphics\/UnitBezier.h"}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Bezier","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Bezier"}],"url":"\/documentation\/motion\/bezier"},"doc://Motion/documentation/Motion/Bezier/x1":{"role":"symbol","title":"x1","fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"x1"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Scalar"}],"abstract":[{"type":"text","text":"The x value of the first point."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Bezier\/x1","kind":"symbol","type":"topic","url":"\/documentation\/motion\/bezier\/x1"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/bezier/x2.json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"x2"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Scalar"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/bezier\/x2"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/Bezier\/x2","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The y value of the first point."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"x2"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Scalar"}],"title":"x2","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:6Motion6BezierV2x2xvp","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/Bezier"]]},"references":{"doc://Motion/documentation/Motion/Bezier/x2":{"role":"symbol","title":"x2","fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"x2"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Scalar"}],"abstract":[{"type":"text","text":"The y value of the first point."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Bezier\/x2","kind":"symbol","type":"topic","url":"\/documentation\/motion\/bezier\/x2"},"doc://Motion/documentation/Motion/Bezier":{"role":"symbol","title":"Bezier","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Bezier"}],"abstract":[{"type":"text","text":"A Swift adaptation of UnitBezier from WebKit: https:\/\/opensource.apple.com\/source\/WebCore\/WebCore-955.66\/platform\/graphics\/UnitBezier.h"}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Bezier","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Bezier"}],"url":"\/documentation\/motion\/bezier"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/bezier/y1.json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"y1"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Scalar"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/bezier\/y1"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/Bezier\/y1","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The x value of the second point."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"y1"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Scalar"}],"title":"y1","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:6Motion6BezierV2y1xvp","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/Bezier"]]},"references":{"doc://Motion/documentation/Motion/Bezier":{"role":"symbol","title":"Bezier","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Bezier"}],"abstract":[{"type":"text","text":"A Swift adaptation of UnitBezier from WebKit: https:\/\/opensource.apple.com\/source\/WebCore\/WebCore-955.66\/platform\/graphics\/UnitBezier.h"}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Bezier","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Bezier"}],"url":"\/documentation\/motion\/bezier"},"doc://Motion/documentation/Motion/Bezier/y1":{"role":"symbol","title":"y1","fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"y1"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Scalar"}],"abstract":[{"type":"text","text":"The x value of the second point."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Bezier\/y1","kind":"symbol","type":"topic","url":"\/documentation\/motion\/bezier\/y1"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/bezier/y2.json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"y2"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Scalar"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/bezier\/y2"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/Bezier\/y2","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The y value of the second point."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"y2"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Scalar"}],"title":"y2","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:6Motion6BezierV2y2xvp","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/Bezier"]]},"references":{"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/Bezier/y2":{"role":"symbol","title":"y2","fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"y2"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Scalar"}],"abstract":[{"type":"text","text":"The y value of the second point."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Bezier\/y2","kind":"symbol","type":"topic","url":"\/documentation\/motion\/bezier\/y2"},"doc://Motion/documentation/Motion/Bezier":{"role":"symbol","title":"Bezier","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Bezier"}],"abstract":[{"type":"text","text":"A Swift adaptation of UnitBezier from WebKit: https:\/\/opensource.apple.com\/source\/WebCore\/WebCore-955.66\/platform\/graphics\/UnitBezier.h"}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Bezier","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Bezier"}],"url":"\/documentation\/motion\/bezier"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/cadisableactions(_:).json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"CADisableActions"},{"kind":"text","text":"("},{"kind":"externalParam","text":"_"},{"kind":"text","text":" "},{"kind":"internalParam","text":"block"},{"kind":"text","text":": () -> "},{"kind":"typeIdentifier","text":"Void","preciseIdentifier":"s:s4Voida"},{"kind":"text","text":")"}],"languages":["swift"],"platforms":["macOS"]}]},{"kind":"parameters","parameters":[{"name":"block","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"The block that, when run, will have a new "},{"type":"codeVoice","code":"CATransaction"},{"type":"text","text":" created for it and will disable actions, which will be committed after the block completes."}]}]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/cadisableactions(_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/CADisableActions(_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Helper method to disable all implicitly created animations inside the supplied block."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"CADisableActions"},{"kind":"text","text":"(() -> "},{"kind":"typeIdentifier","text":"Void","preciseIdentifier":"s:s4Voida"},{"kind":"text","text":")"}],"title":"CADisableActions(_:)","roleHeading":"Function","role":"symbol","symbolKind":"func","externalID":"s:6Motion16CADisableActionsyyyyXEF","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion"]]},"references":{"doc://Motion/documentation/Motion/CADisableActions(_:)":{"role":"symbol","title":"CADisableActions(_:)","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"CADisableActions"},{"kind":"text","text":"(() -> "},{"kind":"typeIdentifier","text":"Void","preciseIdentifier":"s:s4Voida"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Helper method to disable all implicitly created animations inside the supplied block."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/CADisableActions(_:)","kind":"symbol","type":"topic","url":"\/documentation\/motion\/cadisableactions(_:)"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/cakeyframeanimationvalueconvertible/tokeyframevalue().json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"toKeyframeValue"},{"kind":"text","text":"() -> "},{"kind":"typeIdentifier","text":"AnyObject","preciseIdentifier":"s:s9AnyObjecta"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/cakeyframeanimationvalueconvertible\/tokeyframevalue()"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/CAKeyframeAnimationValueConvertible\/toKeyframeValue()","interfaceLanguage":"swift"},"kind":"symbol","metadata":{"role":"symbol","title":"toKeyframeValue()","roleHeading":"Instance Method","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"toKeyframeValue"},{"kind":"text","text":"() -> "},{"kind":"typeIdentifier","text":"AnyObject","preciseIdentifier":"s:s9AnyObjecta"}],"symbolKind":"method","externalID":"s:6Motion35CAKeyframeAnimationValueConvertibleP010toKeyframeD0yXlyF","required":true,"modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/CAKeyframeAnimationValueConvertible"]]},"references":{"doc://Motion/documentation/Motion/CAKeyframeAnimationValueConvertible/toKeyframeValue()":{"role":"symbol","title":"toKeyframeValue()","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"toKeyframeValue"},{"kind":"text","text":"() -> "},{"kind":"typeIdentifier","text":"AnyObject","preciseIdentifier":"s:s9AnyObjecta"}],"abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion\/CAKeyframeAnimationValueConvertible\/toKeyframeValue()","kind":"symbol","required":true,"type":"topic","url":"\/documentation\/motion\/cakeyframeanimationvalueconvertible\/tokeyframevalue()"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/CAKeyframeAnimationValueConvertible":{"role":"symbol","title":"CAKeyframeAnimationValueConvertible","fragments":[{"kind":"keyword","text":"protocol"},{"kind":"text","text":" "},{"kind":"identifier","text":"CAKeyframeAnimationValueConvertible"}],"abstract":[{"type":"text","text":"A protocol for types to supply the ability to convert themselves into "},{"type":"codeVoice","code":"NSValue"},{"type":"text","text":" or "},{"type":"codeVoice","code":"NSNumber"},{"type":"text","text":" for use with "},{"type":"codeVoice","code":"CAKeyframeAnimation"},{"type":"text","text":". This is required for "},{"type":"codeVoice","code":"CAKeyframeAnimationEmittable"},{"type":"text","text":"."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/CAKeyframeAnimationValueConvertible","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"CAKeyframeAnimationValueConvertible"}],"url":"\/documentation\/motion\/cakeyframeanimationvalueconvertible"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/decayanimation/hasresolved().json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"override"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hasResolved"},{"kind":"text","text":"() -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/decayanimation\/hasresolved()"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/DecayAnimation\/hasResolved()","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Returns whether or not the animation has resolved. It is considered resolved when its velocity reaches zero."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hasResolved"},{"kind":"text","text":"() -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"title":"hasResolved()","roleHeading":"Instance Method","role":"symbol","symbolKind":"method","externalID":"s:6Motion14DecayAnimationC11hasResolvedSbyF","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/DecayAnimation"]]},"references":{"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/DecayAnimation":{"role":"symbol","title":"DecayAnimation","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"DecayAnimation"}],"abstract":[{"type":"text","text":"This class provides the ability to animate types that conform to "},{"type":"codeVoice","code":"Value"},{"type":"text","text":" based on decay functions."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/DecayAnimation","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"DecayAnimation"}],"url":"\/documentation\/motion\/decayanimation"},"doc://Motion/documentation/Motion/DecayAnimation/hasResolved()":{"role":"symbol","title":"hasResolved()","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hasResolved"},{"kind":"text","text":"() -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[{"type":"text","text":"Returns whether or not the animation has resolved. It is considered resolved when its velocity reaches zero."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/DecayAnimation\/hasResolved()","kind":"symbol","type":"topic","url":"\/documentation\/motion\/decayanimation\/hasresolved()"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/easingfunction/equatable-implementations.json: -------------------------------------------------------------------------------- 1 | {"variants":[{"paths":["\/documentation\/motion\/easingfunction\/equatable-implementations"],"traits":[{"interfaceLanguage":"swift"}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/EasingFunction\/Equatable-Implementations","interfaceLanguage":"swift"},"topicSections":[{"title":"Operators","identifiers":["doc:\/\/Motion\/documentation\/Motion\/EasingFunction\/!=(_:_:)"],"generated":true}],"kind":"article","metadata":{"modules":[{"name":"Motion"}],"role":"collectionGroup","title":"Equatable Implementations"},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/EasingFunction"]]},"references":{"doc://Motion/documentation/Motion/EasingFunction":{"role":"symbol","title":"EasingFunction","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"EasingFunction"}],"abstract":[{"type":"text","text":"An easing function powered by a "},{"type":"codeVoice","code":"Bezier"},{"type":"text","text":" that can be used with a "},{"type":"codeVoice","code":"BasicAnimation"},{"type":"text","text":"."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/EasingFunction","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"EasingFunction"}],"url":"\/documentation\/motion\/easingfunction"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/EasingFunction/!=(_:_:)":{"role":"symbol","title":"!=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion\/EasingFunction\/!=(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/motion\/easingfunction\/!=(_:_:)"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/easingfunction/hash(into:).json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hash"},{"kind":"text","text":"("},{"kind":"externalParam","text":"into"},{"kind":"text","text":" "},{"kind":"internalParam","text":"hasher"},{"kind":"text","text":": "},{"kind":"keyword","text":"inout"},{"kind":"text","text":" "},{"kind":"typeIdentifier","text":"Hasher","preciseIdentifier":"s:s6HasherV"},{"kind":"text","text":")"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/easingfunction\/hash(into:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/EasingFunction\/hash(into:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Hashes this easing curve into a hash."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hash"},{"kind":"text","text":"("},{"kind":"externalParam","text":"into"},{"kind":"text","text":": "},{"kind":"keyword","text":"inout"},{"kind":"text","text":" "},{"kind":"typeIdentifier","text":"Hasher","preciseIdentifier":"s:s6HasherV"},{"kind":"text","text":")"}],"title":"hash(into:)","roleHeading":"Instance Method","role":"symbol","symbolKind":"method","externalID":"s:6Motion14EasingFunctionV4hash4intoys6HasherVz_tF","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/EasingFunction"]]},"references":{"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/EasingFunction":{"role":"symbol","title":"EasingFunction","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"EasingFunction"}],"abstract":[{"type":"text","text":"An easing function powered by a "},{"type":"codeVoice","code":"Bezier"},{"type":"text","text":" that can be used with a "},{"type":"codeVoice","code":"BasicAnimation"},{"type":"text","text":"."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/EasingFunction","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"EasingFunction"}],"url":"\/documentation\/motion\/easingfunction"},"doc://Motion/documentation/Motion/EasingFunction/hash(into:)":{"role":"symbol","title":"hash(into:)","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hash"},{"kind":"text","text":"("},{"kind":"externalParam","text":"into"},{"kind":"text","text":": "},{"kind":"keyword","text":"inout"},{"kind":"text","text":" "},{"kind":"typeIdentifier","text":"Hasher","preciseIdentifier":"s:s6HasherV"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Hashes this easing curve into a hash."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/EasingFunction\/hash(into:)","kind":"symbol","type":"topic","url":"\/documentation\/motion\/easingfunction\/hash(into:)"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/floatingpointinitializable/init(_:)-8h6ky.json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"_"},{"kind":"text","text":" "},{"kind":"internalParam","text":"value"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Float","preciseIdentifier":"s:Sf"},{"kind":"text","text":")"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/floatingpointinitializable\/init(_:)-8h6ky"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/FloatingPointInitializable\/init(_:)-8h6ky","interfaceLanguage":"swift"},"kind":"symbol","metadata":{"role":"symbol","title":"init(_:)","roleHeading":"Initializer","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Float","preciseIdentifier":"s:Sf"},{"kind":"text","text":")"}],"symbolKind":"init","externalID":"s:6Motion26FloatingPointInitializablePyxSfcfc","required":true,"modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/FloatingPointInitializable"]]},"references":{"doc://Motion/documentation/Motion/FloatingPointInitializable/init(_:)-8h6ky":{"role":"symbol","title":"init(_:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Float","preciseIdentifier":"s:Sf"},{"kind":"text","text":")"}],"abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion\/FloatingPointInitializable\/init(_:)-8h6ky","kind":"symbol","required":true,"type":"topic","url":"\/documentation\/motion\/floatingpointinitializable\/init(_:)-8h6ky"},"doc://Motion/documentation/Motion/FloatingPointInitializable":{"role":"symbol","title":"FloatingPointInitializable","fragments":[{"kind":"keyword","text":"protocol"},{"kind":"text","text":" "},{"kind":"identifier","text":"FloatingPointInitializable"}],"abstract":[{"type":"text","text":"A protocol that describes something that can be initialized by a floating point value."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/FloatingPointInitializable","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"FloatingPointInitializable"}],"url":"\/documentation\/motion\/floatingpointinitializable"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/floatingpointinitializable/init(_:)-pp7q.json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"_"},{"kind":"text","text":" "},{"kind":"internalParam","text":"value"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Double","preciseIdentifier":"s:Sd"},{"kind":"text","text":")"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/floatingpointinitializable\/init(_:)-pp7q"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/FloatingPointInitializable\/init(_:)-pp7q","interfaceLanguage":"swift"},"kind":"symbol","metadata":{"role":"symbol","title":"init(_:)","roleHeading":"Initializer","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Double","preciseIdentifier":"s:Sd"},{"kind":"text","text":")"}],"symbolKind":"init","externalID":"s:6Motion26FloatingPointInitializablePyxSdcfc","required":true,"modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/FloatingPointInitializable"]]},"references":{"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/FloatingPointInitializable/init(_:)-pp7q":{"role":"symbol","title":"init(_:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Double","preciseIdentifier":"s:Sd"},{"kind":"text","text":")"}],"abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion\/FloatingPointInitializable\/init(_:)-pp7q","kind":"symbol","required":true,"type":"topic","url":"\/documentation\/motion\/floatingpointinitializable\/init(_:)-pp7q"},"doc://Motion/documentation/Motion/FloatingPointInitializable":{"role":"symbol","title":"FloatingPointInitializable","fragments":[{"kind":"keyword","text":"protocol"},{"kind":"text","text":" "},{"kind":"identifier","text":"FloatingPointInitializable"}],"abstract":[{"type":"text","text":"A protocol that describes something that can be initialized by a floating point value."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/FloatingPointInitializable","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"FloatingPointInitializable"}],"url":"\/documentation\/motion\/floatingpointinitializable"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/simdrepresentable/zero.json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"zero"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/simdrepresentable\/zero"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/SIMDRepresentable\/zero","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"A version of "},{"type":"codeVoice","code":"self"},{"type":"text","text":" that represents zero."}],"kind":"symbol","metadata":{"role":"symbol","title":"zero","roleHeading":"Type Property","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"zero"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"}],"symbolKind":"property","externalID":"s:6Motion17SIMDRepresentableP4zeroxvpZ","required":true,"modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/SIMDRepresentable"]]},"references":{"doc://Motion/documentation/Motion/SIMDRepresentable":{"role":"symbol","title":"SIMDRepresentable","fragments":[{"kind":"keyword","text":"protocol"},{"kind":"text","text":" "},{"kind":"identifier","text":"SIMDRepresentable"}],"abstract":[{"type":"text","text":"A protocol that defines how something that can be represented \/ stored in a "},{"type":"codeVoice","code":"SIMD"},{"type":"text","text":" type as well as instantiated from said "},{"type":"codeVoice","code":"SIMD"},{"type":"text","text":" type."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/SIMDRepresentable","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SIMDRepresentable"}],"url":"\/documentation\/motion\/simdrepresentable"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/SIMDRepresentable/zero":{"role":"symbol","title":"zero","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"zero"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"}],"abstract":[{"type":"text","text":"A version of "},{"type":"codeVoice","code":"self"},{"type":"text","text":" that represents zero."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/SIMDRepresentable\/zero","kind":"symbol","required":true,"type":"topic","url":"\/documentation\/motion\/simdrepresentable\/zero"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/springanimation/hasresolved().json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"override"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hasResolved"},{"kind":"text","text":"() -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/springanimation\/hasresolved()"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/SpringAnimation\/hasResolved()","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Returns whether or not the spring animation has resolved. It is considered resolved when the "},{"type":"codeVoice","code":"toValue"},{"type":"text","text":" is reached, and "},{"type":"codeVoice","code":"velocity"},{"type":"text","text":" is zero."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hasResolved"},{"kind":"text","text":"() -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"title":"hasResolved()","roleHeading":"Instance Method","role":"symbol","symbolKind":"method","externalID":"s:6Motion15SpringAnimationC11hasResolvedSbyF","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/SpringAnimation"]]},"references":{"doc://Motion/documentation/Motion/SpringAnimation":{"role":"symbol","title":"SpringAnimation","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"SpringAnimation"}],"abstract":[{"type":"text","text":"This class provides the ability to animate "},{"type":"codeVoice","code":"Value"},{"type":"text","text":" using a physically-modeled spring."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/SpringAnimation","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SpringAnimation"}],"url":"\/documentation\/motion\/springanimation"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/SpringAnimation/hasResolved()":{"role":"symbol","title":"hasResolved()","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hasResolved"},{"kind":"text","text":"() -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[{"type":"text","text":"Returns whether or not the spring animation has resolved. It is considered resolved when the "},{"type":"codeVoice","code":"toValue"},{"type":"text","text":" is reached, and "},{"type":"codeVoice","code":"velocity"},{"type":"text","text":" is zero."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/SpringAnimation\/hasResolved()","kind":"symbol","type":"topic","url":"\/documentation\/motion\/springanimation\/hasresolved()"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/springanimation/init(initialvalue:).json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"initialValue"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"},{"kind":"text","text":" = .zero)"}],"languages":["swift"],"platforms":["macOS"]}]},{"kind":"parameters","parameters":[{"name":"initialValue","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"The value to start animating from."}]}]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/springanimation\/init(initialvalue:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/SpringAnimation\/init(initialValue:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Initializes a "},{"type":"codeVoice","code":"SpringAnimation"},{"type":"text","text":" with an optional initial value."}],"kind":"symbol","metadata":{"fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"initialValue"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"},{"kind":"text","text":")"}],"title":"init(initialValue:)","roleHeading":"Initializer","role":"symbol","symbolKind":"init","externalID":"s:6Motion15SpringAnimationC12initialValueACyxGx_tcfc","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/SpringAnimation"]]},"references":{"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/SpringAnimation/init(initialValue:)":{"role":"symbol","title":"init(initialValue:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"initialValue"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Initializes a "},{"type":"codeVoice","code":"SpringAnimation"},{"type":"text","text":" with an optional initial value."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/SpringAnimation\/init(initialValue:)","kind":"symbol","type":"topic","url":"\/documentation\/motion\/springanimation\/init(initialvalue:)"},"doc://Motion/documentation/Motion/SpringAnimation":{"role":"symbol","title":"SpringAnimation","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"SpringAnimation"}],"abstract":[{"type":"text","text":"This class provides the ability to animate "},{"type":"codeVoice","code":"Value"},{"type":"text","text":" using a physically-modeled spring."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/SpringAnimation","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SpringAnimation"}],"url":"\/documentation\/motion\/springanimation"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/springanimation/velocity.json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"override"},{"kind":"text","text":" "},{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"velocity"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" "},{"kind":"keyword","text":"set"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/springanimation\/velocity"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/SpringAnimation\/velocity","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The velocity of the animation. Setting this before calling "},{"type":"codeVoice","code":"start"},{"type":"text","text":" will cause the spring animation to be seeded with that velocity, and then the velocity will decay over time."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"velocity"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"}],"title":"velocity","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:6Motion15SpringAnimationC8velocityxvp","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/SpringAnimation"]]},"references":{"doc://Motion/documentation/Motion/SpringAnimation":{"role":"symbol","title":"SpringAnimation","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"SpringAnimation"}],"abstract":[{"type":"text","text":"This class provides the ability to animate "},{"type":"codeVoice","code":"Value"},{"type":"text","text":" using a physically-modeled spring."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/SpringAnimation","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SpringAnimation"}],"url":"\/documentation\/motion\/springanimation"},"doc://Motion/documentation/Motion/SpringAnimation/velocity":{"role":"symbol","title":"velocity","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"velocity"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"}],"abstract":[{"type":"text","text":"The velocity of the animation. Setting this before calling "},{"type":"codeVoice","code":"start"},{"type":"text","text":" will cause the spring animation to be seeded with that velocity, and then the velocity will decay over time."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/SpringAnimation\/velocity","kind":"symbol","type":"topic","url":"\/documentation\/motion\/springanimation\/velocity"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/springfunction/w0.json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"w0"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"},{"kind":"text","text":"."},{"kind":"typeIdentifier","text":"SIMDType"},{"kind":"text","text":"."},{"kind":"typeIdentifier","text":"Scalar"},{"kind":"text","text":" { get }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/springfunction\/w0"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/SpringFunction\/w0","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The undamped angular frequency of the spring."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"w0"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"},{"kind":"text","text":"."},{"kind":"typeIdentifier","text":"SIMDType"},{"kind":"text","text":"."},{"kind":"typeIdentifier","text":"Scalar"}],"title":"w0","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:6Motion14SpringFunctionV2w08SIMDType_6ScalarQZvp","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/SpringFunction"]]},"references":{"doc://Motion/documentation/Motion/SpringFunction":{"role":"symbol","title":"SpringFunction","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SpringFunction"}],"abstract":[{"type":"text","text":"This class provides an interface to use various optimized implementations of the analytic versions of spring functions with "},{"type":"codeVoice","code":"SupportedSIMD"},{"type":"text","text":" and "},{"type":"codeVoice","code":"Value"},{"type":"text","text":" types."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/SpringFunction","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SpringFunction"}],"url":"\/documentation\/motion\/springfunction"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/SpringFunction/w0":{"role":"symbol","title":"w0","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"w0"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"},{"kind":"text","text":"."},{"kind":"typeIdentifier","text":"SIMDType"},{"kind":"text","text":"."},{"kind":"typeIdentifier","text":"Scalar"}],"abstract":[{"type":"text","text":"The undamped angular frequency of the spring."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/SpringFunction\/w0","kind":"symbol","type":"topic","url":"\/documentation\/motion\/springfunction\/w0"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/supportedscalar/cos(_:).json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"override"},{"kind":"text","text":" "},{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"cos"},{"kind":"text","text":"("},{"kind":"externalParam","text":"_"},{"kind":"text","text":" "},{"kind":"internalParam","text":"x"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Self"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/supportedscalar\/cos(_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/SupportedScalar\/cos(_:)","interfaceLanguage":"swift"},"kind":"symbol","metadata":{"role":"symbol","title":"cos(_:)","roleHeading":"Type Method","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"cos"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Self"}],"symbolKind":"method","externalID":"s:6Motion15SupportedScalarP3cosyxxFZ","required":true,"modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/SupportedScalar"]]},"references":{"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/SupportedScalar":{"role":"symbol","title":"SupportedScalar","fragments":[{"kind":"keyword","text":"protocol"},{"kind":"text","text":" "},{"kind":"identifier","text":"SupportedScalar"}],"abstract":[{"type":"text","text":"A protocol that defines supported "},{"type":"codeVoice","code":"SIMD"},{"type":"text","text":" Scalar types that conform to "},{"type":"codeVoice","code":"FloatingPointInitializable"},{"type":"text","text":", "},{"type":"codeVoice","code":"EquatableEnough"},{"type":"text","text":", and are "},{"type":"codeVoice","code":"RealModule.Real"},{"type":"text","text":" numbers."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/SupportedScalar","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SupportedScalar"}],"url":"\/documentation\/motion\/supportedscalar"},"doc://Motion/documentation/Motion/SupportedScalar/cos(_:)":{"role":"symbol","title":"cos(_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"cos"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Self"}],"abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion\/SupportedScalar\/cos(_:)","kind":"symbol","required":true,"type":"topic","url":"\/documentation\/motion\/supportedscalar\/cos(_:)"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/supportedscalar/exp(_:).json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"override"},{"kind":"text","text":" "},{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"exp"},{"kind":"text","text":"("},{"kind":"externalParam","text":"_"},{"kind":"text","text":" "},{"kind":"internalParam","text":"x"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Self"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/supportedscalar\/exp(_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/SupportedScalar\/exp(_:)","interfaceLanguage":"swift"},"kind":"symbol","metadata":{"role":"symbol","title":"exp(_:)","roleHeading":"Type Method","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"exp"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Self"}],"symbolKind":"method","externalID":"s:6Motion15SupportedScalarP3expyxxFZ","required":true,"modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/SupportedScalar"]]},"references":{"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/SupportedScalar":{"role":"symbol","title":"SupportedScalar","fragments":[{"kind":"keyword","text":"protocol"},{"kind":"text","text":" "},{"kind":"identifier","text":"SupportedScalar"}],"abstract":[{"type":"text","text":"A protocol that defines supported "},{"type":"codeVoice","code":"SIMD"},{"type":"text","text":" Scalar types that conform to "},{"type":"codeVoice","code":"FloatingPointInitializable"},{"type":"text","text":", "},{"type":"codeVoice","code":"EquatableEnough"},{"type":"text","text":", and are "},{"type":"codeVoice","code":"RealModule.Real"},{"type":"text","text":" numbers."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/SupportedScalar","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SupportedScalar"}],"url":"\/documentation\/motion\/supportedscalar"},"doc://Motion/documentation/Motion/SupportedScalar/exp(_:)":{"role":"symbol","title":"exp(_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"exp"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Self"}],"abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion\/SupportedScalar\/exp(_:)","kind":"symbol","required":true,"type":"topic","url":"\/documentation\/motion\/supportedscalar\/exp(_:)"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/supportedscalar/sin(_:).json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"override"},{"kind":"text","text":" "},{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"sin"},{"kind":"text","text":"("},{"kind":"externalParam","text":"_"},{"kind":"text","text":" "},{"kind":"internalParam","text":"x"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Self"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/supportedscalar\/sin(_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/SupportedScalar\/sin(_:)","interfaceLanguage":"swift"},"kind":"symbol","metadata":{"role":"symbol","title":"sin(_:)","roleHeading":"Type Method","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"sin"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Self"}],"symbolKind":"method","externalID":"s:6Motion15SupportedScalarP3sinyxxFZ","required":true,"modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/SupportedScalar"]]},"references":{"doc://Motion/documentation/Motion/SupportedScalar/sin(_:)":{"role":"symbol","title":"sin(_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"sin"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Self"}],"abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion\/SupportedScalar\/sin(_:)","kind":"symbol","required":true,"type":"topic","url":"\/documentation\/motion\/supportedscalar\/sin(_:)"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/SupportedScalar":{"role":"symbol","title":"SupportedScalar","fragments":[{"kind":"keyword","text":"protocol"},{"kind":"text","text":" "},{"kind":"identifier","text":"SupportedScalar"}],"abstract":[{"type":"text","text":"A protocol that defines supported "},{"type":"codeVoice","code":"SIMD"},{"type":"text","text":" Scalar types that conform to "},{"type":"codeVoice","code":"FloatingPointInitializable"},{"type":"text","text":", "},{"type":"codeVoice","code":"EquatableEnough"},{"type":"text","text":", and are "},{"type":"codeVoice","code":"RealModule.Real"},{"type":"text","text":" numbers."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/SupportedScalar","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SupportedScalar"}],"url":"\/documentation\/motion\/supportedscalar"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/uiscrollviewdecayconstant.json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"UIScrollViewDecayConstant"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Double","preciseIdentifier":"s:Sd"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/uiscrollviewdecayconstant"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/UIScrollViewDecayConstant","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The standard decay constant for "},{"type":"codeVoice","code":"UIScrollView"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"UIScrollViewDecayConstant"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Double","preciseIdentifier":"s:Sd"}],"title":"UIScrollViewDecayConstant","roleHeading":"Global Variable","role":"symbol","symbolKind":"var","externalID":"s:6Motion25UIScrollViewDecayConstantSdvp","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion"]]},"references":{"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/UIScrollViewDecayConstant":{"role":"symbol","title":"UIScrollViewDecayConstant","fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"UIScrollViewDecayConstant"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Double","preciseIdentifier":"s:Sd"}],"abstract":[{"type":"text","text":"The standard decay constant for "},{"type":"codeVoice","code":"UIScrollView"},{"type":"text","text":"."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/UIScrollViewDecayConstant","kind":"symbol","type":"topic","url":"\/documentation\/motion\/uiscrollviewdecayconstant"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/uiscrollviewrubberbandingconstant.json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"UIScrollViewRubberBandingConstant"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Double","preciseIdentifier":"s:Sd"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/uiscrollviewrubberbandingconstant"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/UIScrollViewRubberBandingConstant","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The standard rubberbanding constant for "},{"type":"codeVoice","code":"UIScrollView"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"UIScrollViewRubberBandingConstant"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Double","preciseIdentifier":"s:Sd"}],"title":"UIScrollViewRubberBandingConstant","roleHeading":"Global Variable","role":"symbol","symbolKind":"var","externalID":"s:6Motion33UIScrollViewRubberBandingConstantSdvp","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion"]]},"references":{"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/UIScrollViewRubberBandingConstant":{"role":"symbol","title":"UIScrollViewRubberBandingConstant","fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"UIScrollViewRubberBandingConstant"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Double","preciseIdentifier":"s:Sd"}],"abstract":[{"type":"text","text":"The standard rubberbanding constant for "},{"type":"codeVoice","code":"UIScrollView"},{"type":"text","text":"."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/UIScrollViewRubberBandingConstant","kind":"symbol","type":"topic","url":"\/documentation\/motion\/uiscrollviewrubberbandingconstant"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/valueanimation/hashable-implementations.json: -------------------------------------------------------------------------------- 1 | {"variants":[{"paths":["\/documentation\/motion\/valueanimation\/hashable-implementations"],"traits":[{"interfaceLanguage":"swift"}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/ValueAnimation\/Hashable-Implementations","interfaceLanguage":"swift"},"topicSections":[{"title":"Instance Methods","identifiers":["doc:\/\/Motion\/documentation\/Motion\/ValueAnimation\/hash(into:)"],"generated":true}],"kind":"article","metadata":{"modules":[{"name":"Motion"}],"role":"collectionGroup","title":"Hashable Implementations"},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/ValueAnimation"]]},"references":{"doc://Motion/documentation/Motion/ValueAnimation":{"role":"symbol","title":"ValueAnimation","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"ValueAnimation"}],"abstract":[{"type":"text","text":"This class provides the ability to animate changes to values ("},{"type":"codeVoice","code":"Value"},{"type":"text","text":") over time."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/ValueAnimation","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ValueAnimation"}],"url":"\/documentation\/motion\/valueanimation"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/ValueAnimation/hash(into:)":{"conformance":{"constraints":[{"type":"codeVoice","code":"Value"},{"type":"text","text":" conforms to "},{"type":"codeVoice","code":"SIMDRepresentable"},{"type":"text","text":"."}],"availabilityPrefix":[{"type":"text","text":"Available when"}],"conformancePrefix":[{"type":"text","text":"Conforms when"}]},"role":"symbol","title":"hash(into:)","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hash"},{"kind":"text","text":"("},{"kind":"externalParam","text":"into"},{"kind":"text","text":": "},{"kind":"keyword","text":"inout"},{"kind":"text","text":" "},{"kind":"typeIdentifier","text":"Hasher","preciseIdentifier":"s:s6HasherV"},{"kind":"text","text":")"}],"abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion\/ValueAnimation\/hash(into:)","kind":"symbol","type":"topic","url":"\/documentation\/motion\/valueanimation\/hash(into:)"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/valueanimation/resolvingepsilon.json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"resolvingEpsilon"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"},{"kind":"text","text":"."},{"kind":"typeIdentifier","text":"SIMDType"},{"kind":"text","text":"."},{"kind":"typeIdentifier","text":"EpsilonType"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/valueanimation\/resolvingepsilon"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/ValueAnimation\/resolvingEpsilon","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The default tolerance level for an animation to be considered finished."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"resolvingEpsilon"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"},{"kind":"text","text":"."},{"kind":"typeIdentifier","text":"SIMDType"},{"kind":"text","text":"."},{"kind":"typeIdentifier","text":"EpsilonType"}],"title":"resolvingEpsilon","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:6Motion14ValueAnimationC16resolvingEpsilon8SIMDType_0E4TypeQZvp","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/ValueAnimation"]]},"references":{"doc://Motion/documentation/Motion/ValueAnimation":{"role":"symbol","title":"ValueAnimation","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"ValueAnimation"}],"abstract":[{"type":"text","text":"This class provides the ability to animate changes to values ("},{"type":"codeVoice","code":"Value"},{"type":"text","text":") over time."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/ValueAnimation","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ValueAnimation"}],"url":"\/documentation\/motion\/valueanimation"},"doc://Motion/documentation/Motion/ValueAnimation/resolvingEpsilon":{"role":"symbol","title":"resolvingEpsilon","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"resolvingEpsilon"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"},{"kind":"text","text":"."},{"kind":"typeIdentifier","text":"SIMDType"},{"kind":"text","text":"."},{"kind":"typeIdentifier","text":"EpsilonType"}],"abstract":[{"type":"text","text":"The default tolerance level for an animation to be considered finished."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/ValueAnimation\/resolvingEpsilon","kind":"symbol","type":"topic","url":"\/documentation\/motion\/valueanimation\/resolvingepsilon"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/valueanimation/supportsvelocity.json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"supportsVelocity"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/valueanimation\/supportsvelocity"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/ValueAnimation\/supportsVelocity","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Returns whether or not this class supports velocity."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"supportsVelocity"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"title":"supportsVelocity","roleHeading":"Type Property","role":"symbol","symbolKind":"property","externalID":"s:6Motion14ValueAnimationC16supportsVelocitySbvpZ","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/ValueAnimation"]]},"references":{"doc://Motion/documentation/Motion/ValueAnimation":{"role":"symbol","title":"ValueAnimation","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"ValueAnimation"}],"abstract":[{"type":"text","text":"This class provides the ability to animate changes to values ("},{"type":"codeVoice","code":"Value"},{"type":"text","text":") over time."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/ValueAnimation","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ValueAnimation"}],"url":"\/documentation\/motion\/valueanimation"},"doc://Motion/documentation/Motion/ValueAnimation/supportsVelocity":{"role":"symbol","title":"supportsVelocity","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"supportsVelocity"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[{"type":"text","text":"Returns whether or not this class supports velocity."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/ValueAnimation\/supportsVelocity","kind":"symbol","type":"topic","url":"\/documentation\/motion\/valueanimation\/supportsvelocity"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/valueanimation/tovalue.json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"toValue"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" "},{"kind":"keyword","text":"set"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]},{"kind":"content","content":[{"anchor":"discussion","level":2,"type":"heading","text":"Discussion"},{"type":"aside","style":"note","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"Not all animations use this as it doesn’t always make sense. They will have this explicitly disabled."}]}]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/valueanimation\/tovalue"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/ValueAnimation\/toValue","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The target value to animate towards."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"toValue"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"}],"title":"toValue","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:6Motion14ValueAnimationC02toB0xvp","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/ValueAnimation"]]},"references":{"doc://Motion/documentation/Motion/ValueAnimation/toValue":{"role":"symbol","title":"toValue","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"toValue"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"}],"abstract":[{"type":"text","text":"The target value to animate towards."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/ValueAnimation\/toValue","kind":"symbol","type":"topic","url":"\/documentation\/motion\/valueanimation\/tovalue"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/ValueAnimation":{"role":"symbol","title":"ValueAnimation","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"ValueAnimation"}],"abstract":[{"type":"text","text":"This class provides the ability to animate changes to values ("},{"type":"codeVoice","code":"Value"},{"type":"text","text":") over time."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/ValueAnimation","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ValueAnimation"}],"url":"\/documentation\/motion\/valueanimation"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/valueanimation/value.json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"value"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" "},{"kind":"keyword","text":"set"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/valueanimation\/value"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/ValueAnimation\/value","interfaceLanguage":"swift"},"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"value"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"}],"title":"value","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:6Motion14ValueAnimationC5valuexvp","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/ValueAnimation"]]},"references":{"doc://Motion/documentation/Motion/ValueAnimation/value":{"role":"symbol","title":"value","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"value"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"}],"abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion\/ValueAnimation\/value","kind":"symbol","type":"topic","url":"\/documentation\/motion\/valueanimation\/value"},"doc://Motion/documentation/Motion/ValueAnimation":{"role":"symbol","title":"ValueAnimation","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"ValueAnimation"}],"abstract":[{"type":"text","text":"This class provides the ability to animate changes to values ("},{"type":"codeVoice","code":"Value"},{"type":"text","text":") over time."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/ValueAnimation","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ValueAnimation"}],"url":"\/documentation\/motion\/valueanimation"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"}}} -------------------------------------------------------------------------------- /docs/data/documentation/motion/valueanimation/valuechangedcallback.json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"typealias"},{"kind":"text","text":" "},{"kind":"identifier","text":"ValueChangedCallback"},{"kind":"text","text":" = (("},{"kind":"typeIdentifier","text":"Value"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Void","preciseIdentifier":"s:s4Voida"},{"kind":"text","text":")"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/valueanimation\/valuechangedcallback"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/ValueAnimation\/ValueChangedCallback","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"A block to be called when "},{"type":"codeVoice","code":"value"},{"type":"text","text":" changes."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"typealias"},{"kind":"text","text":" "},{"kind":"identifier","text":"ValueChangedCallback"}],"title":"ValueAnimation.ValueChangedCallback","roleHeading":"Type Alias","role":"symbol","symbolKind":"typealias","externalID":"s:6Motion14ValueAnimationC0B15ChangedCallbacka","modules":[{"name":"Motion"}],"navigatorTitle":[{"kind":"identifier","text":"ValueChangedCallback"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/ValueAnimation"]]},"references":{"doc://Motion/documentation/Motion/ValueAnimation":{"role":"symbol","title":"ValueAnimation","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"ValueAnimation"}],"abstract":[{"type":"text","text":"This class provides the ability to animate changes to values ("},{"type":"codeVoice","code":"Value"},{"type":"text","text":") over time."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/ValueAnimation","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ValueAnimation"}],"url":"\/documentation\/motion\/valueanimation"},"doc://Motion/documentation/Motion/ValueAnimation/ValueChangedCallback":{"role":"symbol","title":"ValueAnimation.ValueChangedCallback","fragments":[{"kind":"keyword","text":"typealias"},{"kind":"text","text":" "},{"kind":"identifier","text":"ValueChangedCallback"}],"abstract":[{"type":"text","text":"A block to be called when "},{"type":"codeVoice","code":"value"},{"type":"text","text":" changes."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/ValueAnimation\/ValueChangedCallback","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ValueChangedCallback"}],"url":"\/documentation\/motion\/valueanimation\/valuechangedcallback"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"}}} -------------------------------------------------------------------------------- /docs/developer-og-twitter.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/docs/developer-og-twitter.jpg -------------------------------------------------------------------------------- /docs/developer-og.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/docs/developer-og.jpg -------------------------------------------------------------------------------- /docs/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/docs/favicon.ico -------------------------------------------------------------------------------- /docs/favicon.svg: -------------------------------------------------------------------------------- 1 | 10 | 11 | -------------------------------------------------------------------------------- /docs/img/added-icon.d6f7e47d.svg: -------------------------------------------------------------------------------- 1 | 10 | 11 | -------------------------------------------------------------------------------- /docs/img/deprecated-icon.015b4f17.svg: -------------------------------------------------------------------------------- 1 | 10 | 11 | -------------------------------------------------------------------------------- /docs/img/modified-icon.f496e73d.svg: -------------------------------------------------------------------------------- 1 | 10 | 11 | -------------------------------------------------------------------------------- /docs/img/no-image@2x.df2a0a50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/docs/img/no-image@2x.df2a0a50.png -------------------------------------------------------------------------------- /docs/js/highlight-js-diff.62d66733.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * This source file is part of the Swift.org open source project 3 | * 4 | * Copyright (c) 2021 Apple Inc. and the Swift project authors 5 | * Licensed under Apache License v2.0 with Runtime Library Exception 6 | * 7 | * See https://swift.org/LICENSE.txt for license information 8 | * See https://swift.org/CONTRIBUTORS.txt for Swift project authors 9 | */ 10 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-diff"],{"48b8":function(e,n){function a(e){const n=e.regex;return{name:"Diff",aliases:["patch"],contains:[{className:"meta",relevance:10,match:n.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/)},{className:"comment",variants:[{begin:n.either(/Index: /,/^index/,/={3,}/,/^-{3}/,/^\*{3} /,/^\+{3}/,/^diff --git/),end:/$/},{match:/^\*{15}$/}]},{className:"addition",begin:/^\+/,end:/$/},{className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/,end:/$/}]}}e.exports=a}}]); -------------------------------------------------------------------------------- /docs/js/highlight-js-http.163e45b6.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * This source file is part of the Swift.org open source project 3 | * 4 | * Copyright (c) 2021 Apple Inc. and the Swift project authors 5 | * Licensed under Apache License v2.0 with Runtime Library Exception 6 | * 7 | * See https://swift.org/LICENSE.txt for license information 8 | * See https://swift.org/CONTRIBUTORS.txt for Swift project authors 9 | */ 10 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-http"],{c01d:function(e,n){function a(e){const n=e.regex,a="HTTP/(2|1\\.[01])",s=/[A-Za-z][A-Za-z0-9-]*/,t={className:"attribute",begin:n.concat("^",s,"(?=\\:\\s)"),starts:{contains:[{className:"punctuation",begin:/: /,relevance:0,starts:{end:"$",relevance:0}}]}},i=[t,{begin:"\\n\\n",starts:{subLanguage:[],endsWithParent:!0}}];return{name:"HTTP",aliases:["https"],illegal:/\S/,contains:[{begin:"^(?="+a+" \\d{3})",end:/$/,contains:[{className:"meta",begin:a},{className:"number",begin:"\\b\\d{3}\\b"}],starts:{end:/\b\B/,illegal:/\S/,contains:i}},{begin:"(?=^[A-Z]+ (.*?) "+a+"$)",end:/$/,contains:[{className:"string",begin:" ",end:" ",excludeBegin:!0,excludeEnd:!0},{className:"meta",begin:a},{className:"keyword",begin:"[A-Z]+"}],starts:{end:/\b\B/,illegal:/\S/,contains:i}},e.inherit(t,{relevance:0})]}}e.exports=a}}]); -------------------------------------------------------------------------------- /docs/js/highlight-js-java.8326d9d8.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * This source file is part of the Swift.org open source project 3 | * 4 | * Copyright (c) 2021 Apple Inc. and the Swift project authors 5 | * Licensed under Apache License v2.0 with Runtime Library Exception 6 | * 7 | * See https://swift.org/LICENSE.txt for license information 8 | * See https://swift.org/CONTRIBUTORS.txt for Swift project authors 9 | */ 10 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-java"],{"332f":function(e,a){var n="[0-9](_*[0-9])*",s=`\\.(${n})`,i="[0-9a-fA-F](_*[0-9a-fA-F])*",t={className:"number",variants:[{begin:`(\\b(${n})((${s})|\\.)?|(${s}))[eE][+-]?(${n})[fFdD]?\\b`},{begin:`\\b(${n})((${s})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{begin:`(${s})[fFdD]?\\b`},{begin:`\\b(${n})[fFdD]\\b`},{begin:`\\b0[xX]((${i})\\.?|(${i})?\\.(${i}))[pP][+-]?(${n})[fFdD]?\\b`},{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${i})[lL]?\\b`},{begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}],relevance:0};function r(e,a,n){return-1===n?"":e.replace(a,s=>r(e,a,n-1))}function c(e){e.regex;const a="[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",n=a+r("(?:<"+a+"~~~(?:\\s*,\\s*"+a+"~~~)*>)?",/~~~/g,2),s=["synchronized","abstract","private","var","static","if","const ","for","while","strictfp","finally","protected","import","native","final","void","enum","else","break","transient","catch","instanceof","volatile","case","assert","package","default","public","try","switch","continue","throws","protected","public","private","module","requires","exports","do"],i=["super","this"],c=["false","true","null"],l=["char","boolean","long","float","int","byte","short","double"],o={keyword:s,literal:c,type:l,built_in:i},b={className:"meta",begin:"@"+a,contains:[{begin:/\(/,end:/\)/,contains:["self"]}]},_={className:"params",begin:/\(/,end:/\)/,keywords:o,relevance:0,contains:[e.C_BLOCK_COMMENT_MODE],endsParent:!0};return{name:"Java",aliases:["jsp"],keywords:o,illegal:/<\/|#/,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),{begin:/import java\.[a-z]+\./,keywords:"import",relevance:2},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{begin:/"""/,end:/"""/,className:"string",contains:[e.BACKSLASH_ESCAPE]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{match:[/\b(?:class|interface|enum|extends|implements|new)/,/\s+/,a],className:{1:"keyword",3:"title.class"}},{begin:[a,/\s+/,a,/\s+/,/=/],className:{1:"type",3:"variable",5:"operator"}},{begin:[/record/,/\s+/,a],className:{1:"keyword",3:"title.class"},contains:[_,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"new throw return else",relevance:0},{begin:["(?:"+n+"\\s+)",e.UNDERSCORE_IDENT_RE,/\s*(?=\()/],className:{2:"title.function"},keywords:o,contains:[{className:"params",begin:/\(/,end:/\)/,keywords:o,relevance:0,contains:[b,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,t,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},t,b]}}e.exports=c}}]); -------------------------------------------------------------------------------- /docs/js/highlight-js-json.471128d2.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * This source file is part of the Swift.org open source project 3 | * 4 | * Copyright (c) 2021 Apple Inc. and the Swift project authors 5 | * Licensed under Apache License v2.0 with Runtime Library Exception 6 | * 7 | * See https://swift.org/LICENSE.txt for license information 8 | * See https://swift.org/CONTRIBUTORS.txt for Swift project authors 9 | */ 10 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-json"],{"5ad2":function(n,e){function a(n){const e={className:"attr",begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,relevance:1.01},a={match:/[{}[\],:]/,className:"punctuation",relevance:0},s={beginKeywords:["true","false","null"].join(" ")};return{name:"JSON",contains:[e,a,n.QUOTE_STRING_MODE,s,n.C_NUMBER_MODE,n.C_LINE_COMMENT_MODE,n.C_BLOCK_COMMENT_MODE],illegal:"\\S"}}n.exports=a}}]); -------------------------------------------------------------------------------- /docs/js/highlight-js-llvm.6100b125.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * This source file is part of the Swift.org open source project 3 | * 4 | * Copyright (c) 2021 Apple Inc. and the Swift project authors 5 | * Licensed under Apache License v2.0 with Runtime Library Exception 6 | * 7 | * See https://swift.org/LICENSE.txt for license information 8 | * See https://swift.org/CONTRIBUTORS.txt for Swift project authors 9 | */ 10 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-llvm"],{"7c30":function(e,n){function a(e){const n=e.regex,a=/([-a-zA-Z$._][\w$.-]*)/,t={className:"type",begin:/\bi\d+(?=\s|\b)/},i={className:"operator",relevance:0,begin:/=/},c={className:"punctuation",relevance:0,begin:/,/},l={className:"number",variants:[{begin:/0[xX][a-fA-F0-9]+/},{begin:/-?\d+(?:[.]\d+)?(?:[eE][-+]?\d+(?:[.]\d+)?)?/}],relevance:0},r={className:"symbol",variants:[{begin:/^\s*[a-z]+:/}],relevance:0},s={className:"variable",variants:[{begin:n.concat(/%/,a)},{begin:/%\d+/},{begin:/#\d+/}]},o={className:"title",variants:[{begin:n.concat(/@/,a)},{begin:/@\d+/},{begin:n.concat(/!/,a)},{begin:n.concat(/!\d+/,a)},{begin:/!\d+/}]};return{name:"LLVM IR",keywords:"begin end true false declare define global constant private linker_private internal available_externally linkonce linkonce_odr weak weak_odr appending dllimport dllexport common default hidden protected extern_weak external thread_local zeroinitializer undef null to tail target triple datalayout volatile nuw nsw nnan ninf nsz arcp fast exact inbounds align addrspace section alias module asm sideeffect gc dbg linker_private_weak attributes blockaddress initialexec localdynamic localexec prefix unnamed_addr ccc fastcc coldcc x86_stdcallcc x86_fastcallcc arm_apcscc arm_aapcscc arm_aapcs_vfpcc ptx_device ptx_kernel intel_ocl_bicc msp430_intrcc spir_func spir_kernel x86_64_sysvcc x86_64_win64cc x86_thiscallcc cc c signext zeroext inreg sret nounwind noreturn noalias nocapture byval nest readnone readonly inlinehint noinline alwaysinline optsize ssp sspreq noredzone noimplicitfloat naked builtin cold nobuiltin noduplicate nonlazybind optnone returns_twice sanitize_address sanitize_memory sanitize_thread sspstrong uwtable returned type opaque eq ne slt sgt sle sge ult ugt ule uge oeq one olt ogt ole oge ord uno ueq une x acq_rel acquire alignstack atomic catch cleanup filter inteldialect max min monotonic nand personality release seq_cst singlethread umax umin unordered xchg add fadd sub fsub mul fmul udiv sdiv fdiv urem srem frem shl lshr ashr and or xor icmp fcmp phi call trunc zext sext fptrunc fpext uitofp sitofp fptoui fptosi inttoptr ptrtoint bitcast addrspacecast select va_arg ret br switch invoke unwind unreachable indirectbr landingpad resume malloc alloca free load store getelementptr extractelement insertelement shufflevector getresult extractvalue insertvalue atomicrmw cmpxchg fence argmemonly double",contains:[t,e.COMMENT(/;\s*$/,null,{relevance:0}),e.COMMENT(/;/,/$/),e.QUOTE_STRING_MODE,{className:"string",variants:[{begin:/"/,end:/[^\\]"/}]},o,c,i,s,r,l]}}e.exports=a}}]); -------------------------------------------------------------------------------- /docs/js/highlight-js-markdown.90077643.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * This source file is part of the Swift.org open source project 3 | * 4 | * Copyright (c) 2021 Apple Inc. and the Swift project authors 5 | * Licensed under Apache License v2.0 with Runtime Library Exception 6 | * 7 | * See https://swift.org/LICENSE.txt for license information 8 | * See https://swift.org/CONTRIBUTORS.txt for Swift project authors 9 | */ 10 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-markdown"],{"04b0":function(n,e){function a(n){const e=n.regex,a={begin:/<\/?[A-Za-z_]/,end:">",subLanguage:"xml",relevance:0},i={begin:"^[-\\*]{3,}",end:"$"},s={className:"code",variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{begin:"(~{3,})[^~](.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))",contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},c={className:"bullet",begin:"^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)",end:"\\s+",excludeEnd:!0},t={begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]},g=/[A-Za-z][A-Za-z0-9+.-]*/,d={variants:[{begin:/\[.+?\]\[.*?\]/,relevance:0},{begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/,relevance:2},{begin:e.concat(/\[.+?\]\(/,g,/:\/\/.*?\)/),relevance:2},{begin:/\[.+?\]\([./?&#].*?\)/,relevance:1},{begin:/\[.*?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{match:/\[(?=\])/},{className:"string",relevance:0,begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0},{className:"link",relevance:0,begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",relevance:0,begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}]},l={className:"strong",contains:[],variants:[{begin:/_{2}/,end:/_{2}/},{begin:/\*{2}/,end:/\*{2}/}]},o={className:"emphasis",contains:[],variants:[{begin:/\*(?!\*)/,end:/\*/},{begin:/_(?!_)/,end:/_/,relevance:0}]};l.contains.push(o),o.contains.push(l);let b=[a,d];l.contains=l.contains.concat(b),o.contains=o.contains.concat(b),b=b.concat(l,o);const r={className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:b},{begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n",contains:b}]}]},m={className:"quote",begin:"^>\\s+",contains:b,end:"$"};return{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[r,a,c,l,o,m,s,i,d,t]}}n.exports=a}}]); -------------------------------------------------------------------------------- /docs/js/highlight-js-shell.dd7f411f.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * This source file is part of the Swift.org open source project 3 | * 4 | * Copyright (c) 2021 Apple Inc. and the Swift project authors 5 | * Licensed under Apache License v2.0 with Runtime Library Exception 6 | * 7 | * See https://swift.org/LICENSE.txt for license information 8 | * See https://swift.org/CONTRIBUTORS.txt for Swift project authors 9 | */ 10 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-shell"],{b65b:function(s,n){function e(s){return{name:"Shell Session",aliases:["console","shellsession"],contains:[{className:"meta",begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/,starts:{end:/[^\\](?=\s*$)/,subLanguage:"bash"}}]}}s.exports=e}}]); -------------------------------------------------------------------------------- /docs/js/highlight-js-xml.9c3688c7.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * This source file is part of the Swift.org open source project 3 | * 4 | * Copyright (c) 2021 Apple Inc. and the Swift project authors 5 | * Licensed under Apache License v2.0 with Runtime Library Exception 6 | * 7 | * See https://swift.org/LICENSE.txt for license information 8 | * See https://swift.org/CONTRIBUTORS.txt for Swift project authors 9 | */ 10 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-xml"],{"8dcb":function(e,n){function a(e){const n=e.regex,a=n.concat(/[A-Z_]/,n.optional(/[A-Z0-9_.-]*:/),/[A-Z0-9_.-]*/),s=/[A-Za-z0-9._:-]+/,t={className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},i={begin:/\s/,contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},c=e.inherit(i,{begin:/\(/,end:/\)/}),l=e.inherit(e.APOS_STRING_MODE,{className:"string"}),r=e.inherit(e.QUOTE_STRING_MODE,{className:"string"}),g={endsWithParent:!0,illegal:/`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,contains:[{className:"meta",begin://,relevance:10,contains:[i,r,l,c,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin://,contains:[i,c,r,l]}]}]},e.COMMENT(//,{relevance:10}),{begin://,relevance:10},t,{className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{className:"tag",begin:/)/,end:/>/,keywords:{name:"style"},contains:[g],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:/)/,end:/>/,keywords:{name:"script"},contains:[g],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:/<>|<\/>/},{className:"tag",begin:n.concat(//,/>/,/\s/)))),end:/\/?>/,contains:[{className:"name",begin:a,relevance:0,starts:g}]},{className:"tag",begin:n.concat(/<\//,n.lookahead(n.concat(a,/>/))),contains:[{className:"name",begin:a,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}e.exports=a}}]); -------------------------------------------------------------------------------- /docs/metadata.json: -------------------------------------------------------------------------------- 1 | {"bundleDisplayName":"Motion","bundleIdentifier":"Motion","schemaVersion":{"major":0,"minor":1,"patch":0}} -------------------------------------------------------------------------------- /docs/theme-settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "meta": {}, 3 | "theme": { 4 | "code": { 5 | "indentationWidth": 4 6 | }, 7 | "colors": { 8 | "text": "", 9 | "text-background": "", 10 | "grid": "", 11 | "article-background": "", 12 | "generic-modal-background": "", 13 | "secondary-label": "", 14 | "header-text": "", 15 | "not-found": { 16 | "input-border": "" 17 | }, 18 | "runtime-preview": { 19 | "text": "" 20 | }, 21 | "tabnav-item": { 22 | "border-color": "" 23 | }, 24 | "svg-icon": { 25 | "fill-light": "", 26 | "fill-dark": "" 27 | }, 28 | "loading-placeholder": { 29 | "background": "" 30 | }, 31 | "button": { 32 | "text": "", 33 | "light": { 34 | "background": "", 35 | "backgroundHover": "", 36 | "backgroundActive": "" 37 | }, 38 | "dark": { 39 | "background": "", 40 | "backgroundHover": "", 41 | "backgroundActive": "" 42 | } 43 | }, 44 | "link": null 45 | }, 46 | "style": { 47 | "button": { 48 | "borderRadius": null 49 | } 50 | }, 51 | "typography": { 52 | "html-font": "" 53 | } 54 | }, 55 | "features": { 56 | "docs": { 57 | } 58 | } 59 | } 60 | --------------------------------------------------------------------------------