|
import SwiftUI |
|
|
|
struct AnimatedStateButton: View { |
|
|
|
@State private var show1 = false |
|
@State private var show2 = false |
|
@State private var show3 = false |
|
@State private var show4 = false |
|
@State private var show5 = false |
|
@State private var show6 = false |
|
@State private var show7 = false |
|
@State private var show8 = false |
|
@State private var show9 = false |
|
@State private var show10 = false |
|
@State private var show11 = false |
|
|
|
var body: some View { |
|
VStack(spacing: 16) { |
|
|
|
// no effect no animation |
|
Button { |
|
show1.toggle() |
|
} label: { |
|
Label("Graph", systemImage: "chevron.right.circle") |
|
.labelStyle(.iconOnly) |
|
.imageScale(.large) |
|
} |
|
|
|
// OK |
|
Button { |
|
show2.toggle() |
|
} label: { |
|
Label("Graph", systemImage: "chevron.right.circle") |
|
.labelStyle(.iconOnly) |
|
.imageScale(.large) |
|
.rotationEffect(.degrees(show2 ? 90 : 0)) |
|
.scaleEffect(show2 ? 1.5 : 1) |
|
} |
|
|
|
// OK custom animation |
|
Button { |
|
show3.toggle() |
|
} label: { |
|
Label("Graph", systemImage: "chevron.right.circle") |
|
.labelStyle(.iconOnly) |
|
.imageScale(.large) |
|
.rotationEffect(.degrees(show3 ? 90 : 0)) |
|
.scaleEffect(show3 ? 1.5 : 1) |
|
.animation(.spring(), value: show3) |
|
} |
|
|
|
// no rotation animation |
|
Button { |
|
show4.toggle() |
|
} label: { |
|
Label("Graph", systemImage: "chevron.right.circle") |
|
.labelStyle(.iconOnly) |
|
.imageScale(.large) |
|
.rotationEffect(.degrees(show4 ? 90 : 0)) |
|
.animation(nil, value: show4) |
|
.scaleEffect(show4 ? 1.5 : 1) |
|
.animation(.spring(), value: show4) |
|
} |
|
|
|
// OK |
|
Button { |
|
withAnimation { |
|
show5.toggle() |
|
} |
|
} label: { |
|
Label("Graph", systemImage: "chevron.right.circle") |
|
.labelStyle(.iconOnly) |
|
.imageScale(.large) |
|
.rotationEffect(.degrees(show5 ? 90 : 0)) |
|
.scaleEffect(show5 ? 1.5 : 1) |
|
} |
|
|
|
// no rotate animation |
|
Button { |
|
withAnimation { |
|
show6.toggle() |
|
} |
|
} label: { |
|
Label("Graph", systemImage: "chevron.right.circle") |
|
.labelStyle(.iconOnly) |
|
.imageScale(.large) |
|
.rotationEffect(.degrees(show6 ? 90 : 0)) |
|
.animation(nil, value: show6) |
|
.scaleEffect(show6 ? 1.5 : 1) |
|
} |
|
|
|
// too slow |
|
Button { |
|
withAnimation(.easeInOut(duration: 4)) { |
|
show7.toggle() |
|
} |
|
} label: { |
|
Label("Graph", systemImage: "chevron.right.circle") |
|
.labelStyle(.iconOnly) |
|
.imageScale(.large) |
|
.rotationEffect(.degrees(show7 ? 90 : 0)) |
|
.scaleEffect(show7 ? 1.5 : 1) |
|
} |
|
|
|
// OK |
|
Button { |
|
show8.toggle() |
|
} label: { |
|
Image(systemName: "chevron.right.circle") |
|
.labelStyle(.iconOnly) |
|
.imageScale(.large) |
|
.rotationEffect(.degrees(show8 ? 90 : 0)) |
|
.scaleEffect(show8 ? 1.5 : 1) |
|
} |
|
|
|
// OK state effect other view |
|
Button { |
|
withAnimation { |
|
show9.toggle() |
|
} |
|
} label: { |
|
Image(systemName: "chevron.right.circle") |
|
.labelStyle(.iconOnly) |
|
.imageScale(.large) |
|
.rotationEffect(.degrees(show9 ? 90 : 0)) |
|
.scaleEffect(show9 ? 1.5 : 1) |
|
} |
|
|
|
// no scale animation |
|
Button { |
|
withAnimation { |
|
show10.toggle() |
|
} |
|
} label: { |
|
Image(systemName: "chevron.right.circle") |
|
.labelStyle(.iconOnly) |
|
.imageScale(.large) |
|
.scaleEffect(show10 ? 1.5 : 1) |
|
.animation(nil, value: show10) |
|
.rotationEffect(.degrees(show10 ? 90 : 0)) |
|
} |
|
|
|
// no animation |
|
Button { |
|
withAnimation(.none) { |
|
show11.toggle() |
|
} |
|
} label: { |
|
Image(systemName: "chevron.right.circle") |
|
.labelStyle(.iconOnly) |
|
.imageScale(.large) |
|
.scaleEffect(show11 ? 1.5 : 1) |
|
.rotationEffect(.degrees(show11 ? 90 : 0)) |
|
} |
|
|
|
} |
|
} |
|
} |
|
|
|
#Preview { |
|
AnimatedStateButton() |
|
} |