我的主视图包含CustomView,点击时可通过 来打开详细视图NavigationLink。详细视图还包含CustomView,只是位置不同。
CustomView我可以使用匹配几何效果在单击导航链接时对位置进行过渡/动画吗?
struct HomeView: View {
@Namespace var namespace
var body: some View {
NavigationStack {
VStack {
Text("Top")
NavigationLink {
DetailView(namespace: namespace)
} label: {
CustomView()
.matchedGeometryEffect(id: "testId", in: namespace)
}
Text("Bottom")
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
struct DetailView: View {
var namespace: Namespace.ID
var body: some View {
VStack {
CustomView()
.matchedGeometryEffect(id: "testId", in: namespace)
Text("Details")
Spacer()
}
}
}
Run Code Online (Sandbox Code Playgroud) swift swiftui swiftui-navigationlink swiftui-animation swiftui-transition
我是 SwiftUI 的新手,我正在尝试使用.transition,但由于某种原因没有发生转换。
你可以看到下面的代码:
看法
import SwiftUI
struct ContentView: View {
@ObservedObject var viewModel = ViewModel()
var body: some View {
if self.viewModel.model.show {
Text("Showing")
.padding()
} else {
Text("Not Showing")
.padding()
.transition(.asymmetric(insertion: .scale, removal: .opacity))
}
Button {
self.viewModel.show()
} label: {
Text("Tap to change")
}
}
}
Run Code Online (Sandbox Code Playgroud)
视图模型
class ViewModel: ObservableObject {
@Published private(set) var model = Model()
func show() {
self.model.toggleShow()
}
}
Run Code Online (Sandbox Code Playgroud)
模型
struct Model {
var show: Bool = true
mutating func toggleShow() …Run Code Online (Sandbox Code Playgroud)