如何使用点击手势来偏移图像或形状视图
How to use tap gesture to offset an image or shape view
我正在尝试使用 SwiftUI 来制作它,这样如果我点击一个圆圈、图像或类似的东西,它就会偏移到某个位置,如果我再次点击,它就会消失回到该位置,并同样地前后切换。我找到了一个教我如何切换背景颜色的教程。 https://www.ioscreator.com/tutorials/swiftui-gesture-tutorial。如果你懒得看,本质上代码是这样的:
struct ContentView: View {
// 1.
@State private var didTap: Bool = false
var body: some View {
// 2.
Text("Tap me")
.frame(minWidth:0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
// 3.
.gesture(TapGesture()
.onEnded {
self.didTap.toggle()
}
)
// 4.
.background(didTap ? Color.blue : Color.red)
}
}
我改变了
Text("Tap me")
.frame(minWidth:0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
到
Circle()
.frame(width: 100, height: 100)
.foregroundColor(Color.red)
我想知道是否有办法做到这一点,所以我可以将 TapGesture 布尔变量合并到 .offset(x: __, y: __)
而不是 .background(didTap ? Color.blue : Color.red)
不知何故。
我希望这是您正在寻找的解决方案,而且我已经更改了您添加点击手势的方式。
struct TestView: View {
@State private var didTap: Bool = false
private var xOffset: CGFloat {
return didTap ? 10.0 : 0.0
}
var body: some View {
// 2.
Circle()
.frame(width: 100, height: 100)
.foregroundColor(Color.red)
.onTapGesture {
self.didTap.toggle()
}
//The x-offset depends on didTap State
.offset(x: xOffset, y: 0.0)
}}
我正在尝试使用 SwiftUI 来制作它,这样如果我点击一个圆圈、图像或类似的东西,它就会偏移到某个位置,如果我再次点击,它就会消失回到该位置,并同样地前后切换。我找到了一个教我如何切换背景颜色的教程。 https://www.ioscreator.com/tutorials/swiftui-gesture-tutorial。如果你懒得看,本质上代码是这样的:
struct ContentView: View {
// 1.
@State private var didTap: Bool = false
var body: some View {
// 2.
Text("Tap me")
.frame(minWidth:0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
// 3.
.gesture(TapGesture()
.onEnded {
self.didTap.toggle()
}
)
// 4.
.background(didTap ? Color.blue : Color.red)
}
}
我改变了
Text("Tap me")
.frame(minWidth:0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
到
Circle()
.frame(width: 100, height: 100)
.foregroundColor(Color.red)
我想知道是否有办法做到这一点,所以我可以将 TapGesture 布尔变量合并到 .offset(x: __, y: __)
而不是 .background(didTap ? Color.blue : Color.red)
不知何故。
我希望这是您正在寻找的解决方案,而且我已经更改了您添加点击手势的方式。
struct TestView: View {
@State private var didTap: Bool = false
private var xOffset: CGFloat {
return didTap ? 10.0 : 0.0
}
var body: some View {
// 2.
Circle()
.frame(width: 100, height: 100)
.foregroundColor(Color.red)
.onTapGesture {
self.didTap.toggle()
}
//The x-offset depends on didTap State
.offset(x: xOffset, y: 0.0)
}}