Spinner - TimelineView

Updated
Aug 18, 2022 1:19 PM
Created
Aug 8, 2022 4:31 PM
Tags
SwiftUI.framework
Attributes

image

import SwiftUI

let frames = ["⣾", "⣽", "⣻", "⢿", "⡿", "⣟", "⣯", "⣷"]

struct Spinner: View {

  @State var index = 0

  var body: some View {
    LoopTimelineView(frameCount: 8) { frame in
      Text(frames[frame])
    }

  }
}

private struct LoopTimelineView<Content: View>: View {

  struct InnerView: View {

    let date: Date
    let frameCount: Int
    let _content: (Int) -> Content
    @State var currentFrame = 0

    var body: some View {
      _content(currentFrame)
        .onChange(of: date) { newValue in
          withTransaction(Transaction()) {
            currentFrame += 1
            if currentFrame > (frameCount - 1) {
              currentFrame = 0
            }
          }
        }
    }
  }

  let frameCount: Int
  let _content: (Int) -> Content

  init(frameCount: Int, @ViewBuilder content: @escaping (Int) -> Content) {
    self.frameCount = frameCount
    self._content = content
  }

  var body: some View {
    TimelineView(.animation(minimumInterval: 0.05, paused: false)) { context in
      InnerView(date: context.date, frameCount: frameCount, _content: _content)
    }
  }
}

Recently updated notes

📖
Notes

NameTagsUpdated
just happened
SwiftUI.frameworkSwift
Sep 22, 2022 6:13 PM
Rendering ascii utils
Swift
Sep 22, 2022 8:45 AM
SwiftUI EnvironmentValues - SwiftUI.PropertyList
SwiftSwiftUI.framework
Sep 22, 2022 10:13 AM
Regex example
Sep 21, 2022 1:27 PM
SwiftUI animation - Structural Identity
SwiftSwiftUI.framework
Sep 16, 2022 12:39 PM
Verge v9 migration note
Sep 15, 2022 3:49 AM
Merging Blob, Metaball
Sep 14, 2022 12:28 PM
SwiftUI Testing
Sep 12, 2022 6:33 PM
Swipe up or down prototyping
SwiftSwiftUI.framework
Sep 10, 2022 9:51 AM
Pick an emoji at random
SwiftMemoDevelopmentSwiftScripting
Sep 10, 2022 7:00 AM
flex-wrap in SwiftUI with Layout API
SwiftSwiftUI.framework
Sep 9, 2022 4:11 PM
SwiftUI backports
SwiftSwiftUI.framework
Sep 9, 2022 4:03 PM
Making Slides in SwiftUI
Swift
Sep 8, 2022 6:35 PM
CORS on Firebase
Sep 5, 2022 8:48 AM
swift-async-shell
SwiftBookmark
Sep 4, 2022 12:34 PM
Furniture shops
Bookmark
Sep 4, 2022 11:06 AM
New StateReader syntax
VergeGroup/VergeSwift
Sep 3, 2022 8:07 PM
Swift snippets for scripting
SwiftSwiftScripting
Sep 4, 2022 12:35 PM
Mixpanel note
mixpanel
Sep 2, 2022 3:23 PM
[scrapbook] Trampoline implementation EventEmitter - Verge
Swift
Sep 1, 2022 3:45 PM
apple/swift-book
SwiftBookmark
Aug 31, 2022 4:50 PM
Swift Concurrency チートシート
SwiftMemoBookmark
Aug 29, 2022 4:59 AM
Check if it is in Task
SwiftConcurrency
Aug 27, 2022 6:11 AM
Behaviors actor annotated type - Swift Concurrency
SwiftConcurrency
Aug 26, 2022 5:23 PM
Syntax Design in Swift
Swift
Aug 25, 2022 12:41 PM
[Syntax Design] .background(.blue)
SwiftSyntaxDesign
Aug 25, 2022 12:41 PM
WidgetKit note
iOSSwift
Sep 15, 2022 1:58 PM
ActivityKit note
iOSSwift
Sep 15, 2022 3:13 PM
Hides warnings coming from calling main actor isolated things
SwiftConcurrency
Aug 25, 2022 1:32 PM
Coffee Grinder - VARIA VS3 GRINDER
Coffee
Aug 29, 2022 6:14 AM
Logger template for iOS12+
Swift
Sep 13, 2022 12:35 PM
Like UIScrollView, how to get "rubber banding effect"
Sep 15, 2022 5:43 AM
🛠️
Valuable iOS development resources
UIKit.frameworkSwiftSwiftUI.frameworkObjective-CCocoaiOS
Aug 29, 2022 5:53 AM