Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在Swift中处理时间后,如何关闭活动指示器?_Ios_Swift_Uiactivityindicatorview_Activity Indicator - Fatal编程技术网

Ios 在Swift中处理时间后,如何关闭活动指示器?

Ios 在Swift中处理时间后,如何关闭活动指示器?,ios,swift,uiactivityindicatorview,activity-indicator,Ios,Swift,Uiactivityindicatorview,Activity Indicator,我有一个iOS Swift应用程序,它使用UIImagePicker的照相机和照片库功能。用户可以从库中选择照片或拍摄照片,然后将照片附加到我的图像阵列中。但是,当用户选择要在选取器中使用的照片或按下“使用照片”按钮时,我的应用程序大约需要2秒钟来处理该照片,并且选取器直到那时才会关闭。因此,我想添加一个活动指示器,让用户知道图像已经被选中,并且正在进行处理。但我不知道怎么做。我知道如何使用UIButtons显示和隐藏活动指示器,但在处理时间结束后如何隐藏活动指示器 func imagePick

我有一个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元素,包括显示/隐藏/动画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