我有一个包含动态内容的视图。我想添加动画(淡入/淡出)以切换到下一个视图
为此,我尝试:
.transition(.opacity)
.animation(.easeInOut, value: tabSelection)
但不起作用,我得到一个幻灯片动画从上到下
我的当前代码:
struct LongOnboardingContainerView: View {
@State var tabSelection = 0
var body: some View {
ZStack {
Step.allCases[tabSelection].view {
tabSelection += 1
}
.transition(.opacity)
.animation(.easeInOut, value: tabSelection)
}
.ignoresSafeArea(.all)
}
enum Step: Int, CaseIterable {
case parentsGoal, nickname, age, mathSkills, languageSkill
func view(pushNext: @escaping () -> ()) -> AnyView {
switch self {
case parentsGoal mathSkills, languageSkill:
return AnyView(MultiAnswerView(viewModel: .init(step: self), pushNext: pushNext))
case .nickname:
return AnyView(NickNameController.swiftUIRepresentation { vc in
vc.nextHandler = pushNext
})
default:
return AnyView(Text("Test").onTapGesture {
pushNext()
})
}
}
}
}
2条答案
按热度按时间elcex8rz1#
我对您的代码做了一个抽象,它显示转换确实适用于相同的底层视图类型(文本),但不适用于不同的视图类型(如昵称和默认值)。
所以我猜动画不喜欢与AnyView类型擦除一起工作。
1l5u6lss2#
我找到了一个模拟crossDissolve动画解决方法: