gpt4 book ai didi

条件 subview 的 SwiftUI 转换

转载 作者:行者123 更新时间:2023-12-04 15:34:23 28 4
gpt4 key购买 nike

我正在尝试理解和试验 swiftUI View 转换,并且可以深入了解为什么以下内容无法按我预期的方式工作:

struct ContentView: View {
@State private var showOverlay: Bool = false

var body: some View {
ZStack {
VStack {
Button(action: {
withAnimation(.easeInOut) {
self.showOverlay = true
}
}) {
Text("Hello, World!")
}
}
.zIndex(0)
.animation(nil)
.blur(radius: showOverlay ? 3 : 0)

if showOverlay {
HStack {
Button(action: {
withAnimation(.easeInOut) {
self.showOverlay = false
}
}) {
Text("Close")
}
.frame(width: 80, height: 80)
.background(Color.red)
.transition(.move(edge: .top))

Button(action: {
withAnimation(.easeInOut) {
self.showOverlay = false
}
}) {
Text("Close")
}
.frame(width: 80, height: 80)
.background(Color.red)
.transition(.move(edge: .bottom))
}
.zIndex(1.0)
}
}
}

有两个按钮的条件 HStack。
当@State 参数 showOverlay更改它是在 withAnimation 内完成的堵塞。
不支持单个按钮上的转换。

如果我移除 HStack,并将 zIndex(1) 放在每个按钮上,则会发生移除转换,但不会发生插入转换。

当它们的组添加到 View 时,我希望两个按钮都以指定的方式转换。

问题:
为什么在 HStack 中包装会导致内部转换被忽略?
为什么边缘过渡仅在 1 个方向上起作用?

最佳答案

过渡适用于出现/消失的 View 。在提供的代码快照中出现/消失 HStack ,因此应对其应用过渡。

注意:过渡必须在模拟器或真实设备上进行测试,其中大部分在预览版中不起作用。

下面是代码的修改部分,它给出了工作行为。使用 Xcode 11.2/iOS 13.2 测试

enter image description here

if showOverlay {
HStack {
Button(action: {
withAnimation(.easeInOut) {
self.showOverlay = false
}
}) {
Text("Close")
}
.frame(width: 80, height: 80)
.background(Color.red)

Button(action: {
withAnimation(.easeInOut) {
self.showOverlay = false
}
}) {
Text("Close")
}
.frame(width: 80, height: 80)
.background(Color.red)
}
.transition(.move(edge: .top)) // << only in this place needed
.zIndex(1.0)
}

关于条件 subview 的 SwiftUI 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60230943/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com