【发布时间】:2020-12-05 11:42:52
【问题描述】:
我想在视图创建后动态地更改视图的过渡。我通过单击按钮在transition1 和transition2 之间切换来切换状态变量isTransition1,如下所示。但是,如果这些过渡之一是不透明度,则它不会按预期工作。更改过渡后立即删除的视图始终保持其原始过渡。令人惊讶的是,如果我将transition2 更改为滑动,它将毫无问题地工作。要移除的视图将使用新的过渡。有什么办法可以让不透明度在这里起作用吗?
let transition1 = AnyTransition.asymmetric(insertion: .move(edge: .trailing),
removal: .move(edge: .leading))
let transition2 = AnyTransition.opacity
struct Wrapper1<Content: View>: View {
let content: Content
var body: some View {
content
}
}
struct Wrapper2<Content: View>: View {
let content: Content
var body: some View {
content
}
}
struct TextView: View {
let count: Int
let color: Color
var body: some View {
ZStack {
color
.edgesIgnoringSafeArea(.all)
.frame(maxWidth: UIScreen.main.bounds.width,
maxHeight: UIScreen.main.bounds.height)
Text("Count: \(count)")
.font(.title)
.offset(y: -200)
}
}
}
struct ContentView: View {
@State private var count = 0
@State private var isTransition1 = false
var body: some View {
ZStack {
if count % 2 == 0 {
Wrapper1(content: TextView(count: count, color: Color.green)
.transition(isTransition1 ? transition1 : transition2))
} else {
Wrapper2(content: TextView(count: count, color: Color.red)
.transition(isTransition1 ? transition1 : transition2))
}
HStack(spacing: 100) {
Button(action: {
self.isTransition1.toggle()
}) {
Text("Toggle Transition").font(.title)
}
Button(action: {
withAnimation(.linear(duration: 2)) {
self.count += 1
}
}) {
Text("Increase").font(.title)
}
}
}
}
}
【问题讨论】:
-
我正在尝试在使用 SwiftUI 实现自定义导航堆栈时实现相同的目标。 @appthumb 您是否设法找到解决方案或解决方法?
-
很遗憾,没有...
-
嗨!有这方面的消息吗?我有同样奇怪的行为......