I am interested in implementing a basic image transition animation with the iOS 14 Widget extension.
My goal is to:
- animate
Image
change every 0.10 seconds - loop endlessly, over 6
Image
s
The problem:
- The
Image
s do not animate nor cycle through in my widget
More details here:
I have a class called AnimatingImage
struct AnimatingImage: View {
let images: [Image]
@ObservedObject private var counter = Counter(interval: 0.10)
var body: some View {
images[counter.value % images.count]
}
}
private class Counter: ObservableObject {
private var timer: Timer?
@Published var value: Int = 0
init(interval: Double) {
timer = Timer.scheduledTimer(withTimeInterval: interval, repeats: true) { _ in self.value += 1 }
print ("has timer")
}
}
It is used inside my Widget's main View
struct SleepCheckerWidgetView : View {
let entry: LastSleepEntry
var body: some View {
let images = [Image("moon_1"),
Image("moon_5"),
Image("moon_10"),
Image("moon_15"),
Image("moon_20")
]
VStack(alignment: .leading, spacing: 4) {
Text("4:44")
.font(.system(.title2))
.foregroundColor(.white)
.bold()
AnimatingImage(images: images)
.scaledToFit()
}.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: .center)
.padding()
}
static func format(date: Date) -> String {
let formatter = DateFormatter()
formatter.dateFormat = "MM-dd-yyyy HH:mm"
return formatter.string(from: date)
}
}