mirror of
https://github.com/EmergeTools/Pow.git
synced 2026-03-25 08:55:50 +00:00
62 lines
1.3 KiB
Swift
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
|