![](/img/trans.png)
[英]how to dismiss a popover and show an activity indicator while doing more processing
[英]How do you dismiss an activity indicator after processing time in Swift?
我有一个iOS Swift应用程序,它通过UIImagePicker使用相机和照片库功能。 用户可以从图库中选择照片或拍照,然后将其添加到我的图像阵列中。 但是,当用户选择要在选择器中使用的照片或按“使用照片”按钮时,我的应用程序将花费大约2秒钟来处理该照片,并且选择器直到那时才会消失。 因此,我想添加一个活动指示器,以使用户知道该图像已被选中并且正在处理中。 但是我不知道该怎么做。 我知道如何使用UIButtons显示和隐藏活动指示器,但是在完成处理时间后如何隐藏活动指示器?
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元素(包括show / hide / animate 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)
}
(假设在情节hidesWhenStopped
设置了UIActivityIndicatorView
的hidesWhenStopped
设置,并将其连接到@IBOutlet
activityIndicator
。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.