Ios 在Swift中处理时间后,如何关闭活动指示器?
我有一个iOS Swift应用程序,它使用UIImagePicker的照相机和照片库功能。用户可以从库中选择照片或拍摄照片,然后将照片附加到我的图像阵列中。但是,当用户选择要在选取器中使用的照片或按下“使用照片”按钮时,我的应用程序大约需要2秒钟来处理该照片,并且选取器直到那时才会关闭。因此,我想添加一个活动指示器,让用户知道图像已经被选中,并且正在进行处理。但我不知道怎么做。我知道如何使用UIButtons显示和隐藏活动指示器,但在处理时间结束后如何隐藏活动指示器Ios 在Swift中处理时间后,如何关闭活动指示器?,ios,swift,uiactivityindicatorview,activity-indicator,Ios,Swift,Uiactivityindicatorview,Activity Indicator,我有一个iOS Swift应用程序,它使用UIImagePicker的照相机和照片库功能。用户可以从库中选择照片或拍摄照片,然后将照片附加到我的图像阵列中。但是,当用户选择要在选取器中使用的照片或按下“使用照片”按钮时,我的应用程序大约需要2秒钟来处理该照片,并且选取器直到那时才会关闭。因此,我想添加一个活动指示器,让用户知道图像已经被选中,并且正在进行处理。但我不知道怎么做。我知道如何使用UIButtons显示和隐藏活动指示器,但在处理时间结束后如何隐藏活动指示器 func imagePick
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
//Adds photo to image array
//Takes a very long time to process.
self.dismiss(animated: true, completion: nil)
}
对于用户来说,2秒有点长,而对于iOS系统来说,2秒太长了,无法占据主线程
无论是否要显示活动指示器,都不应该在主线程中调用这样一个耗时的任务。在后台线程中执行此操作也需要正确更新UI元素,包括显示/隐藏/动画UIActivityIndicatorView
您的代码将如下所示:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
DispatchQueue.global(qos: .userInitiated).async {
DispatchQueue.main.async {
//UI updates needs to be done in the main thread
self.activityIndicator.startAnimating()
//Other UI updates & setups needed for mutual exclusion
}
//### In a background thread...
//Adds photo to image array
//Takes a very long time to process.
DispatchQueue.main.async {
//Reset mutual exclusion & restore UI state
self.activityIndicator.stopAnimating()
}
}
picker.dismiss(animated: true, completion: nil)
}
假设UIActivityIndicatorView是在故事板中设置的,且其hidesWhenStopped设置和连接到@IBOutlet activityIndicator