2016-09-19 3 views
1

私はカメラの現在の画像を分析し、毎秒画面に分析を表示する機能を持っています。しかし、画像の解析は非常にメモリーが強く、画面上でデータを検索したいときにいつでもプロセスを停止できるようにしたいと考えています。私はUITapGestureRecognizerを使ってタップを聞き、画面上で分析を「フリーズ」しようとしました。Swiftのタップで集中的な機能を停止する必要があります

問題は、メモリ集中型関数が完了するのを待っているため、タップしたときに画面上にあったものではなく、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   
    } 
} 

ただし、操作の一時停止は別の問題です。アナリシスループでは、ポーズアクションを実装する必要があります。先の背景はUIをブロックしないように助けます。

分析中にいくつかのポーズ機能を実装するには、ユーザーがポーズを要求した場合に関数内のポイントをチェックする必要があり、その場合、アナリシスの状態を保存して操作を終了する必要があります。その後、操作を再開する場合は、保存した状態から復元します。

関連する問題