ios - 如何使用 onTapGesture 更改视图的偏移量?
问题描述
我正在尝试在点击视图时移动视图。但不幸的是,什么也没发生。如何使用偏移 y 轴切换它的位置?
struct Test: View {
@State var cards : [Card] = [Card(), Card(), Card(), Card(), Card(), Card()]
var body: some View {
VStack {
ZStack (alignment: .top){
ForEach (0..<cards.count) { i in
RoundedRectangle(cornerRadius: 10).frame(width: 250, height: 150)
.foregroundColor(Color.random).offset(y: self.cards[i].isFocus ? CGFloat(500) : CGFloat(i*50))
.zIndex(Double(i))
.onTapGesture {
self.cards[i].isFocus.toggle() // now the touched Card should move to an offset of y: 500, but nothing happens
}
}
}
Spacer()
}
}
}
struct Card :Identifiable{
@State var isFocus :Bool = false
var id = UUID()
}
struct Test_Previews: PreviewProvider {
static var previews: some View {
Test()
}
}
extension Color {
static var random: Color {
return Color(red: .random(in: 0...1),
green: .random(in: 0...1),
blue: .random(in: 0...1))
}
}
解决方案
我看到了您的代码,很抱歉,但它在许多方面都是错误的。我建议您阅读 SwiftUI 基础知识并了解我们如何以及何时使用 @State、@ObservedObject、@Binding 等。同时始终尝试将您的视图分解为最小的组件。以下是我认为满足您要求的代码。
struct Test: View {
var cards : [Card] = [Card(), Card(), Card(), Card(), Card(), Card()]
var body: some View {
VStack {
ZStack (alignment: .top){
ForEach (0..<cards.count) { i in
CardView(card: self.cards[i], i: i)
}
}
Spacer()
}
}
}
struct CardView: View {
@ObservedObject var card: Card
let i: Int
var body: some View {
RoundedRectangle(cornerRadius: 10).frame(width: 250, height: 150)
.foregroundColor(Color.random)
.offset(y: card.isFocus ? CGFloat(500) : CGFloat(i*10))
.zIndex(Double(i))
.onTapGesture {
withAnimation {
self.card.isFocus.toggle()
}
}
}
}
class Card: ObservableObject{
@Published var isFocus: Bool = false
var id = UUID()
}
推荐阅读
- json - 如何强制 DataSnap REST TStream 方法作为内容流而不是 JSON 数组响应
- r - 基于R中的平均值创建新变量的麻烦
- flutter - 是否可以继续使用颤振 SDK“1.20.0”并且不再升级?这种行为会引发任何未来的问题吗?
- python - 如何使用python加载json url并获取数据
- c++ - Qt QNetworkAccessManager post 方法仅在主线程中有效
- html - 修复了 Firefox Android 上的元素移动/跳跃
- python - python plot bar range with months avage 不适合
- python - 如何在python中更改绘图/图形的大小
- json - 在 MongoDB 中插入 FeatureCollection
- python - 在 flask-admin 和 sqlalchemy 中使用 back_populates 字段