2017-02-09 9 views
0

内のタスクを実行している間、私は次のコードを持っている:隠すUIImage UIButton DidTouchイベント

@IBAction func exportDidTouch(_ sender: Any) { 
    self.logoImg.alpha = 0.0 

    let result = exporter.composeString(context: context) 
    exporter.export(composedString: result) 
    let activity = exporter.activityVC() 

    logoImg.alpha = 1.0 
    self.present(activity, animated: true, completion: nil) 
} 

を私はエクスポートするためのファイルを作成していながらUIImageを非表示にします。これを実行すると期待どおりに動作しません、アルファは0.0に設定されているのは、アクティビティコントローラが表示されているときだけです。

初心者になると、なぜこのようなことが起こっているのか分かりません。なぜ、ボタンを押したときに画像が正確に隠されていないのですか?

どうすればこの問題を解決できますか?ボタンをクリックすると非表示になり、アクティビティコントローラが表示されたときに表示されます。

答えて

1

あなたのアクションハンドラがexportDidTouchである限り、これはメインスレッドをブロックし、アクションハンドラが終了していない限りUI更新は表示されません。計算かつて

  • 設定(あなたのハンドラ内で)ゼロにアルファ値asynchronicallyあなたの計算のspawn
  • (例えばグローバルディスパッチキュー内)
  • は、だから、次の操作を行う必要はあり終了し、次のように例えば、メインスレッド

でUIを更新:

@IBAction func exportDidTouch(_ sender: Any) { 
    self.logoImg.alpha = 0.0 

    // Start a work item in an arbitrary (e.g. non-main) thread 
    DispatchQueue.global(qos: .default).async { 
     let result = exporter.composeString(context: context) 
     exporter.export(composedString: result) 
     let activity = exporter.activityVC() 

     // Update UI in main thread 
     DispatchQueue.main.async { 
      logoImg.alpha = 1.0 
      self.present(activity, animated: true, completion: nil) 
     } 
    } 
}