如何在用户点击的位置显示图像?SwiftUI [英] How to display an image where the user taps? SwiftUI
本文介绍了如何在用户点击的位置显示图像?SwiftUI的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在制作挖掘游戏,我想在用户点击的任何地方显示锤子.
I am making a mining tapping game and I want to display a hammer wherever the user taps.
我的意思是,无论用户何时敲击锤子图像,它都会停留一秒钟.
I mean, wherever the user taps the hammer image will stay on for one second.
有办法吗?
我的示例代码如下:
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)
}
}
推荐答案
只需读取水龙头的位置并将其用作锤子图像的位置,如下所示-由SwiftUI
It just need to read location of tap and use it as position for hammer image, like below - all by SwiftUI
通过Xcode 11.4/iOS 13.4测试
Tested with 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)
}
这篇关于如何在用户点击的位置显示图像?SwiftUI的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文