gh-EmergeTools-Pow/Sources/Pow/Infrastructure/ProgressableAnimation.swift
2024-01-03 08:51:46 -08:00

62 lines
1.3 KiB
Swift

//
// ProgressableAnimation.swift
//
//
// Created by Noah Martin on 11/30/23.
//
import Foundation
import SwiftUI
#if DEBUG
typealias DebugProgressableAnimation = ProgressableAnimation
#else
typealias DebugProgressableAnimation = Animatable
#endif
protocol ProgressableAnimation: Animatable {
var progress: CGFloat { get set }
}
extension ProgressableAnimation where AnimatableData == CGFloat {
var progress: CGFloat {
get { animatableData }
set { animatableData = newValue }
}
}
#if DEBUG
protocol PreviewableAnimation {
associatedtype Animation: ProgressableAnimation & ViewModifier
static var animation: Animation { get }
static var content: any View { get }
}
extension PreviewableAnimation {
static var content: any View {
RoundedRectangle(
cornerRadius: 8,
style: .continuous)
.fill(Color.blue)
.frame(width: 80, height: 80)
}
}
extension PreviewableAnimation {
static var previews: AnyView {
let c = self.content
let anyContent = AnyView(c)
let modifiers = [0, 0.25, 0.5, 0.75, 1].map { i in
var copy = self.animation
copy.progress = i
return copy
}
return AnyView(ForEach(Array(modifiers.enumerated()), id: \.offset) { i, modifier in
anyContent.modifier(modifier)
.previewDisplayName("\(String(describing: Animation.self))-\(i)")
})
}
}
#endif