需要在 Swift 中点击以停止密集型功能
Need to stop an intensive function with a tap in Swift
我有一个功能可以分析相机中的当前图像,然后每秒在屏幕上显示分析结果。但是,图像分析非常占用内存,我希望能够随时停止该过程并检索屏幕上的数据。我使用 UITapGestureRecognizer
监听点击并尝试 "freeze" 屏幕上的分析。
问题是,UITapGestureRecognizer
等待内存密集型功能完成,因此会冻结屏幕并进行 NEXT 分析,而不是我点击它时出现在屏幕上的那个。
有没有办法在用户点击屏幕时暂停或退出某个功能?
这是我当前的代码:
var analyzedText:String
var didTap:Bool
var savedText:String
func timerCalled(timer:NSTimer) { // timer is on 1 second delay
let image = capturePhoto()
if (didTap) {
savedText = label.text // "freeze" it
}
let text = analyze(image) // memory-intense function
label.text = text // update UILabel
didTap = false
}
func didTap(tapGR: UITapGestureRecognizer) {
didTap = true
}
savedText
一直是出现的下一个值,而不是点击屏幕时 label.text
的值。
感谢任何帮助。
当 运行 繁重的操作时,您应该始终使用后台线程。
DispatchQueue.global(qos: .background).async {
let text = analyze(image)
DispatchQueue.main.async {
// If you do any updates to the user interface they need to go here so that it's put back on the main thread.
label.text = text
}
}
但是暂停操作是另一回事。您将必须在分析循环中执行暂停操作。不过,前面的背景确实可以帮助您避免阻塞 UI。
要在您的分析中实现一些暂停功能,您需要在您的函数中的某些点检查用户是否请求暂停,如果发生这种情况,您需要保存分析状态并退出操作.然后,如果操作要再次启动,您将从暂停时保存的状态恢复。
我有一个功能可以分析相机中的当前图像,然后每秒在屏幕上显示分析结果。但是,图像分析非常占用内存,我希望能够随时停止该过程并检索屏幕上的数据。我使用 UITapGestureRecognizer
监听点击并尝试 "freeze" 屏幕上的分析。
问题是,UITapGestureRecognizer
等待内存密集型功能完成,因此会冻结屏幕并进行 NEXT 分析,而不是我点击它时出现在屏幕上的那个。
有没有办法在用户点击屏幕时暂停或退出某个功能?
这是我当前的代码:
var analyzedText:String
var didTap:Bool
var savedText:String
func timerCalled(timer:NSTimer) { // timer is on 1 second delay
let image = capturePhoto()
if (didTap) {
savedText = label.text // "freeze" it
}
let text = analyze(image) // memory-intense function
label.text = text // update UILabel
didTap = false
}
func didTap(tapGR: UITapGestureRecognizer) {
didTap = true
}
savedText
一直是出现的下一个值,而不是点击屏幕时 label.text
的值。
感谢任何帮助。
当 运行 繁重的操作时,您应该始终使用后台线程。
DispatchQueue.global(qos: .background).async {
let text = analyze(image)
DispatchQueue.main.async {
// If you do any updates to the user interface they need to go here so that it's put back on the main thread.
label.text = text
}
}
但是暂停操作是另一回事。您将必须在分析循环中执行暂停操作。不过,前面的背景确实可以帮助您避免阻塞 UI。
要在您的分析中实现一些暂停功能,您需要在您的函数中的某些点检查用户是否请求暂停,如果发生这种情况,您需要保存分析状态并退出操作.然后,如果操作要再次启动,您将从暂停时保存的状态恢复。