Swift中如何等待进度覆盖层加载完成后再执行代码?
Swift 5 音频转换前进度覆盖层延迟显示问题
我在Swift 5开发中,需要在上传前对音频文件进行格式转换,当文件时长超过20分钟时转换耗时很长,因此打算实现一个带活动指示器、背景暗化的进度覆盖层来提示用户。
单独使用这个覆盖层时功能正常,但如果在调用startOverlay()后立刻执行startAudioConversion(),覆盖层要等转换完成后才会显示,不符合预期。我最初用UIAlertController替代覆盖层时,也遇到了完全相同的问题——警告控制器要等其他代码执行完才会加载。
我尝试过这些解决方式,但都没效果:
- 给
startOverlay()添加完成回调,在回调中执行转换函数 - 用DispatchQueue调度覆盖层加载
目前我通过在UI调用的完成回调中添加0.5秒延迟来调用转换函数,虽然能正常工作,但我认为有更优的实现方式。
相关代码示例
初始调用代码:
@IBAction func uploadClick(_ sender: Any) { self.startOverlay() self.startAudioConversion() }
尝试添加完成回调的代码:
self.startOverlay() { result in // 为startOverlay函数添加完成回调后 if result { self.startAudioConversion() } }
当前可行的延迟实现代码:
self.startOverlay() { done in print("Overlay should be running...") DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { [self] in self.startAudioConversion() { acresult in // ...后续逻辑 } } }
内容的提问来源于stack exchange,提问作者Ryan H
相关产品推荐
相关产品推荐

