mirror of
https://github.com/EmergeTools/Pow.git
synced 2026-03-25 08:55:50 +00:00
Co-authored-by: Robert Böhnke <robb@robb.is> Co-authored-by: Kasper Lahti <kasper@lahti.email>
79 lines
2.1 KiB
Swift
79 lines
2.1 KiB
Swift
import Pow
|
|
import SwiftUI
|
|
|
|
struct FlipExample: View, Example {
|
|
enum Variant: Hashable {
|
|
case flip
|
|
case standUp
|
|
case sideways
|
|
|
|
var transition: AnyTransition {
|
|
switch self {
|
|
case .flip: return .movingParts.flip
|
|
case .standUp: return .movingParts.rotate3D(.degrees(90), axis: (1, 0, 0), anchor: .bottom, perspective: 1 / 6)
|
|
case .sideways: return .movingParts.rotate3D(.degrees(90), axis: (0, 1, 0), perspective: 1 / 6)
|
|
}
|
|
}
|
|
}
|
|
|
|
@State
|
|
var variant: Variant = .flip
|
|
|
|
@State
|
|
var isVisible: Bool = false
|
|
|
|
var body: some View {
|
|
VStack {
|
|
GroupBox {
|
|
LabeledContent("Configuration") {
|
|
Picker("Configuration", selection: $variant) {
|
|
Text("Flip").tag(Variant.flip)
|
|
Text("Sideways").tag(Variant.sideways)
|
|
Text("Stand Up").tag(Variant.standUp)
|
|
}
|
|
}
|
|
}
|
|
.padding(.horizontal)
|
|
|
|
VStack {
|
|
if isVisible {
|
|
PlaceholderView()
|
|
.id(variant)
|
|
.transition(variant.transition)
|
|
}
|
|
}
|
|
.frame(maxHeight: .infinity)
|
|
.defaultBackground()
|
|
.onTapGesture {
|
|
withAnimation(animation) {
|
|
isVisible.toggle()
|
|
}
|
|
}
|
|
}
|
|
.defaultBackground()
|
|
.onChange(of: variant) { _ in
|
|
withAnimation(animation) {
|
|
isVisible.toggle()
|
|
}
|
|
}
|
|
.autotoggle($isVisible, with: animation)
|
|
}
|
|
|
|
var animation: Animation {
|
|
if isVisible {
|
|
return .easeIn
|
|
} else {
|
|
return .interactiveSpring(response: 0.4, dampingFraction: 0.4, blendDuration: 2.45)
|
|
}
|
|
}
|
|
|
|
static var title: String {
|
|
"Flip & Rotate3D"
|
|
}
|
|
|
|
static let localPath = LocalPath()
|
|
|
|
static var icon: Image? {
|
|
Image(systemName: "rotate.3d")
|
|
}
|
|
}
|