You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 03:22:44