2017-02-09 80 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当我构建一个文件导出。运行此操作无法按预期工作,仅在呈现活动控制器时的末尾将alpha设置为0.0

作为一名初学者,我不太明白为什么会发生这种情况,为什么按下按钮时图像并不完全隐藏?

我该如何解决这个问题?单击按钮时将其隐藏,并在呈现活动控制器时将其显示出来。

回答

1

只要你在你的动作处理程序exportDidTouch,这将阻止主线程,你将不会看到任何用户界面更新,除非操作处理程序已完成。

所以,你必须做到以下几点:

  • 设置alpha值为零(在你的处理器)
  • 产卵你的计算异步地(例如,在一个全球性的调度队列)
  • 一旦计算完成后,更新用户界面在主线程

例如像这样:

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