106 lines
3.6 KiB
Swift
106 lines
3.6 KiB
Swift
import SwiftUI
|
|
|
|
struct AvatarBoxView: View {
|
|
@Environment(\.dismiss) private var dismiss
|
|
@EnvironmentObject private var router: Router
|
|
@State private var isAnimating = false
|
|
|
|
var body: some View {
|
|
ZStack {
|
|
// Background color
|
|
Color.white
|
|
.ignoresSafeArea()
|
|
|
|
VStack(spacing: 0) {
|
|
// Navigation Bar
|
|
HStack {
|
|
Button(action: {
|
|
dismiss()
|
|
}) {
|
|
Image(systemName: "chevron.left")
|
|
.font(.system(size: 17, weight: .medium))
|
|
.foregroundColor(.black)
|
|
.padding()
|
|
}
|
|
|
|
Spacer()
|
|
|
|
Text("动画页面")
|
|
.font(.headline)
|
|
.foregroundColor(.black)
|
|
|
|
Spacer()
|
|
|
|
// Invisible spacer to center the title
|
|
Color.clear
|
|
.frame(width: 44, height: 44)
|
|
}
|
|
.frame(height: 44)
|
|
.background(Color.white)
|
|
|
|
Spacer()
|
|
|
|
// Animated Content
|
|
ZStack {
|
|
// Pulsing circle animation
|
|
Circle()
|
|
.fill(Color.blue.opacity(0.2))
|
|
.frame(width: 200, height: 200)
|
|
.scaleEffect(isAnimating ? 1.5 : 1.0)
|
|
.opacity(isAnimating ? 0.5 : 1.0)
|
|
.animation(
|
|
Animation.easeInOut(duration: 1.5)
|
|
.repeatForever(autoreverses: true),
|
|
value: isAnimating
|
|
)
|
|
|
|
// Center icon
|
|
Image(systemName: "sparkles")
|
|
.font(.system(size: 60))
|
|
.foregroundColor(.blue)
|
|
.rotationEffect(.degrees(isAnimating ? 360 : 0))
|
|
.animation(
|
|
Animation.linear(duration: 8)
|
|
.repeatForever(autoreverses: false),
|
|
value: isAnimating
|
|
)
|
|
}
|
|
.frame(maxWidth: .infinity, maxHeight: .infinity)
|
|
|
|
Spacer()
|
|
|
|
// Bottom Button
|
|
Button(action: {
|
|
router.navigate(to: .feedbackView)
|
|
}) {
|
|
Text("Continue")
|
|
.font(.headline)
|
|
.foregroundColor(.themeTextMessageMain)
|
|
.frame(maxWidth: .infinity)
|
|
.frame(height: 56)
|
|
.background(Color.themePrimary)
|
|
.cornerRadius(25)
|
|
.padding(.horizontal, 24)
|
|
}
|
|
}
|
|
.frame(maxWidth: .infinity, maxHeight: .infinity)
|
|
}
|
|
.navigationBarBackButtonHidden(true)
|
|
.navigationBarHidden(true)
|
|
.onAppear {
|
|
isAnimating = true
|
|
}
|
|
}
|
|
}
|
|
|
|
// MARK: - Preview
|
|
struct AvatarBoxView_Previews: PreviewProvider {
|
|
static var previews: some View {
|
|
NavigationView {
|
|
AvatarBoxView()
|
|
.environmentObject(Router.shared)
|
|
}
|
|
.navigationViewStyle(StackNavigationViewStyle())
|
|
}
|
|
}
|