2016-09-19 65 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子處的狀態恢復。

相關問題