SwiftUI TabView 动画
SwiftUI TabView Animation
我目前在我的应用程序上遇到 pb。
我想为由 SwiftUI TabView 控制的项目的插入和删除设置动画。
这是我能想到的最简单的重现问题的视图
struct ContentView: View {
@State private var selection: Int = 1
var body: some View {
TabView(selection: $selection.animation(),
content: {
Text("Tab Content 1")
.transition(.slide) //could be anything this is for example
.tabItem { Text("tab1") }.tag(1)
.onAppear() {print("testApp")}
.onDisappear(){print("testDis")}
Text("Tab Content 2")
.transition(.slide)
.tabItem { Text("tab2") }.tag(2)
})
}
}
实际上是在点击 tabItem 时。它立即从“选项卡内容 1”切换到“选项卡内容 2”,我想为其设置动画(不是选项卡项目按钮实际选项卡内容)。 On Appear 和 onDisapear 按预期正确调用,因此应触发所有转换。
如果有人有想法开始合作我会很高兴
谢谢
1.with .transition()
我们只指定应该发生哪个转换。
2.Transition 发生(如预期的那样),仅当显式动画发生时。
3.Animation 发生变化时发生(状态,绑定)
这是一种可能的方法。
struct ContentView: View {
@State private var selection: Int = 1
var body: some View {
TabView(selection: $selection,
content: {
ItemView(text:"1")
.tabItem { Text("tab1") }.tag(1)
ItemView(text: "2")
.tabItem { Text("tab2") }.tag(2)
})
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
struct ItemView: View {
let text: String
@State var hidden = true
var body: some View {
VStack {
if !hidden {
Text("Tab Content " + text)
.transition(.slide)
}
}
.onAppear() { withAnimation {
hidden = false
}}
.onDisappear(){hidden = true}
}
}
我目前在我的应用程序上遇到 pb。 我想为由 SwiftUI TabView 控制的项目的插入和删除设置动画。
这是我能想到的最简单的重现问题的视图
struct ContentView: View {
@State private var selection: Int = 1
var body: some View {
TabView(selection: $selection.animation(),
content: {
Text("Tab Content 1")
.transition(.slide) //could be anything this is for example
.tabItem { Text("tab1") }.tag(1)
.onAppear() {print("testApp")}
.onDisappear(){print("testDis")}
Text("Tab Content 2")
.transition(.slide)
.tabItem { Text("tab2") }.tag(2)
})
}
}
实际上是在点击 tabItem 时。它立即从“选项卡内容 1”切换到“选项卡内容 2”,我想为其设置动画(不是选项卡项目按钮实际选项卡内容)。 On Appear 和 onDisapear 按预期正确调用,因此应触发所有转换。
如果有人有想法开始合作我会很高兴
谢谢
1.with .transition()
我们只指定应该发生哪个转换。
2.Transition 发生(如预期的那样),仅当显式动画发生时。
3.Animation 发生变化时发生(状态,绑定)
这是一种可能的方法。
struct ContentView: View {
@State private var selection: Int = 1
var body: some View {
TabView(selection: $selection,
content: {
ItemView(text:"1")
.tabItem { Text("tab1") }.tag(1)
ItemView(text: "2")
.tabItem { Text("tab2") }.tag(2)
})
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
struct ItemView: View {
let text: String
@State var hidden = true
var body: some View {
VStack {
if !hidden {
Text("Tab Content " + text)
.transition(.slide)
}
}
.onAppear() { withAnimation {
hidden = false
}}
.onDisappear(){hidden = true}
}
}