我对SwiftUI还很陌生,我觉得我在一些感觉非常简单的东西上遇到了麻烦.虽然,我已经在这上面花了几个小时,需要一些帮助.我有我的入职观点.我正在try 做的是,当我点击跳过按钮时,它应该会显示一个过渡视图.我将跳过按钮从True切换到False以显示过渡屏幕.我的问题是,当我点击跳过按钮时,它不会刷新入职视图以显示过渡屏幕.
OnboardingView个
import SwiftUI
struct OnboardingView: View {
//MARK: - PROPERTIES
var onboardings: [Onboarding] = OnboardingData
@State private var isAnimating: Bool = false
@State private var showSplash = true
@ObservedObject var showTransition = ShowTransition()
//MARK: - BODY
var body: some View {
ZStack {
if showSplash {
SplashView()
.transition(.opacity)
.animation(.easeOut(duration: 1.5))
} else if showTransition.showTransition == true {
TransitionView()
} else {
GeometryReader { geometry in
ZStack {
Image("Endero Background-LightMode").resizable().aspectRatio(geometry.size, contentMode: .fill).edgesIgnoringSafeArea(.all)
}
Text("Welcome")
.font(.system(size: 48, weight: .heavy))
.frame(maxWidth: .infinity, alignment: .center)
.padding(.top, 23)
.foregroundColor(.black)
}
TabView {
ForEach(onboardings[0...4]) { item in
OnboardingCardView(onboarding: item)
}
}
.tabViewStyle(PageTabViewStyle())
}
}
.onAppear {
DispatchQueue.main.asyncAfter(deadline: .now() + 3)
{
withAnimation {
self.showSplash = false
}
}
}
} // End Body
}
OnboardingCardView个
import SwiftUI
struct OnboardingCardView: View {
//MARK: - PROPERTIES
var onboarding: Onboarding
@State private var isAnimating: Bool = false
//MARK: - BODY
var body: some View {
ZStack {
VStack {
//ONBOARDING: BODY
Text(onboarding.body)
.foregroundColor(Color.black)
.font(.system(size: 32))
.multilineTextAlignment(.center)
.fontWeight(.bold)
.padding(.top, 125)
.padding(.horizontal, 16)
.frame(maxWidth:480)
//BUTTON: SKIP
Spacer()
SkipButtonView()
.padding(.horizontal, 16)
.padding(.bottom, 40)
} //VStack
} //ZStack
.onAppear {
withAnimation(.easeOut(duration: 0.5)) {
isAnimating = true
}
}
.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: .center)
.background(Image(onboarding.background))
.cornerRadius(26)
.padding(.horizontal, 24)
.padding(.top, 120)
.padding(.bottom, 70)
} //END BODY
}
Skip Button View个
import SwiftUI
import Combine
//MARK: - OBSERVABLES
class ShowTransition: ObservableObject {
@Published var showTransition = false
private var cancellable: AnyCancellable?
init() {
cancellable = $showTransition
.sink { [weak self] _ in
self?.objectWillChange.send()
}
}
func showTransitionToggle() {
showTransition.toggle()
}
}
struct SkipButtonView: View {
// MARK: - PROPERTIES
@AppStorage("isOnboarding") var isOnboarding: Bool?
@ObservedObject var showTransition = ShowTransition()
// MARK: - BODY
var body: some View {
HStack {
Button(action: {
showTransition.showTransitionToggle()
print(showTransition.showTransition)
}) {
Text("SKIP")
.font(.system(size: 29))
.fontWeight(.semibold)
.foregroundColor(.white)
.background(
Capsule().strokeBorder(Color.white, lineWidth: 2.5).frame(width: 300, height: 50, alignment: .center)
)
.accentColor(Color.white)
}
}
}
}
当我在应用程序开始时将showTransition值设置为True时,它会显示转换屏幕.所以我觉得问题在于,当我点击跳过按钮以显示过渡屏幕时,并没有刷新入网视图以显示过渡视图.