2016-09-19 34 views
1

我有一个功能,可以分析摄像机中的当前图像,然后每秒在屏幕上显示分析结果。但是,图像分析的内存非常强烈,我希望能够随时停止该过程并在屏幕上检索数据。我用UITapGestureRecognizer来聆听水龙头,并尝试在屏幕上“冻结”分析。需要在Swift中使用水龙头来停止密集功能

问题是,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是当屏幕被挖下一个值。

任何帮助表示赞赏。

回答

1

当运行繁重的操作时,您应该始终使用后台线程。

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   
    } 
} 

但暂停操作是另一回事。您将不得不在分析循环中执行paus动作。前面的背景确实可以帮助你不会阻止用户界面。

要在分析中实现一些paus功能,您需要检查函数中的点,如果用户请求了paus,并且发生了这种情况,则需要保存分析状态并退出操作。然后,如果手术再次启动,您可以从您保存在pa子处的状态恢复。