我的应用程序与Tinder非常相似,用户通过向右(喜欢)或向左(拒绝)滑动人们的个人资料来进行"匹配"。
我面临的唯一问题是识别HomeView
中显示的每个用户,如何删除该用户,显示下一个用户,以及知道哪个喜欢的用户必须作为网络调用中的参数。
Person
结构:**
struct Person: Identifiable, Hashable {
var age: Int
var username: String
}
- 显示每个
Person
的CardView
:**
- 显示每个
struct CardView: View {
@State var person: Person
var body: some View {
ZStack {
Image()
.frame(width: 200, height: 600)
VStack() {
HStack {
Text(person.username)
.font(.system(size: 32, weight: .heavy))
Text(String(person.age))
.font(.system(size: 28, weight: .light))
}
}
}
}
}
- 以及
CardStack
,其中ForEach
获取userMng中的所有Person
。用户:**
- 以及
一个二个一个一个
- 最后是
HomeView
,用户可在其中决定喜欢或不喜欢哪个人:**
- 最后是
struct HomeView: View {
@EnvironmentObject var userMng: UserManager
@State var person: Person?
var body: some View {
VStack {
CardStack(person: person ?? Person(data: ["username": "ExampleUsername"]))
HStack { // Here is where all three buttons are shown
CircleButtonView(type: .no) {
// Button action...
}
CircleButtonView(type: .back) {
// Button action...
}
CircleButtonView(type: .heart) {
if let person = userMng.people.last {
userMng.swipe(person, _direction: .like)
}
}
}
}
}
}
我唯一想到的是为每个显示的用户使用一个currentIndex
,但老实说,我不知道如何实现它。
1条答案
按热度按时间lmvvr0a81#
首先,我不认为在所有可用的人上使用zstack是一个好主意,因为这会占用大量的内存。在用户滑动时加载每个人的carview应该可以用更少的资源完成这项工作。
但是如果你想保留zstack,你只需要在swipe时添加removeLast(),因为只有最后一个对象会被移除,然后视图会自动更新。