I K*_*aya 3 position image swiftui
我正在制作一个采矿点击游戏,我想在用户点击的地方显示一把锤子。
我的意思是,无论用户点击哪里,锤子图像都会停留一秒钟。
有办法做到吗?
我的示例代码如下:
struct Level1: View {
@State var tapScore = 0
@State var showingMinedHammer = false
func showMinedHammer() {
self.showingMinedHammer = true
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
self.showingMinedHammer = false
}
}
func mine() {
tapScore += 1
showMinedHammer()
}
var body: some View {
GeometryReader { geometryProxy in
ZStack {
Image("mine1").resizable().frame(width: UIScreen.main.bounds.height * 1.4, height: UIScreen.main.bounds.height)
.onTapGesture {
self.mine()
}
if self.showingMinedHammer {
Image(systemName: "hammer.fill")
.resizable()
.frame(width: 30, height: 30)
}
}
}.edgesIgnoringSafeArea(.all)
}
}
Run Code Online (Sandbox Code Playgroud)
它只需要读取水龙头的位置并将其用作锤子图像的位置,如下所示 - 全部由 SwiftUI 完成
使用 Xcode 11.4 / iOS 13.4 进行测试
这里只修改了部分
@State private var location = CGPoint.zero // < here !!
var body: some View {
GeometryReader { geometryProxy in
ZStack {
Image("mine1").resizable().frame(width: UIScreen.main.bounds.height * 1.4, height: UIScreen.main.bounds.height)
.gesture(DragGesture(minimumDistance: 0).onEnded { value in
self.location = value.location // < here !!
self.mine()
})
if self.showingMinedHammer {
Image(systemName: "hammer.fill")
.resizable()
.frame(width: 30, height: 30)
.position(self.location) // < here !!
}
}
}.edgesIgnoringSafeArea(.all)
}
Run Code Online (Sandbox Code Playgroud)