【发布时间】:2020-02-12 17:42:30
【问题描述】:
我有一个简单的应用程序,旨在像这样工作:
- 使用默认图片加载应用
- 一旦收到点击,就会从列表中加载随机图像
- 如果 5 秒内未收到任何点击,我们将重置为默认图像
我正在尝试使用 DispatchQueue 和 DispatchWorkItem 来完成此任务。我已经设法使上述功能正常工作 - 除非用户多次点击。
我假设这是因为我们每次点击时都会启动“resetToOff”DispatchWorkItem 而没有重置 5 秒。
如果在重置 DispatchQueue 时 5 秒内没有收到触摸,如何将图像重置为默认图像?
这是我目前所拥有的:
import SwiftUI
struct PlayView : View {
@ObservedObject var viewRouter: ViewRouter
@State var imageName : String = "smiley"
var body: some View {
ZStack {
Color.black
.edgesIgnoringSafeArea(.all)
Image(imageName)
}
.gesture(
TapGesture()
.onEnded {
let resetToOff = DispatchWorkItem {
self.imageName = "smiley"
}
self.changeImage()
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(5), execute: resetToOff)
}
)
// Activate the options menu
.onLongPressGesture(minimumDuration: 3) {
self.viewRouter.currentPage = "menuView"
}
}
func changeImage() {
let tempImageName : String = self.imageName
let list : Array = [
"smileyPink",
"smileyGreen",
"smileyRed",
"smileyBlue",
"smileyYellow"
]
self.imageName = list.randomElement() ?? ""
// Ensure that new image selection is not the same as previous image
while tempImageName == self.imageName {
self.imageName = list.randomElement() ?? ""
}
}
}
struct PlayView_Previews : PreviewProvider {
static var previews: some View {
PlayView(viewRouter: ViewRouter())
}
}
对此的任何帮助将不胜感激。
【问题讨论】:
标签: ios swift iphone swiftui dispatch-queue