Swift 在某些情况下,UIAlertController不会被解雇
在我的项目中,一个视频将被处理,然后经过一些效果,它将被播放。处理视频时,我想显示Swift 在某些情况下,UIAlertController不会被解雇,swift,uialertcontroller,Swift,Uialertcontroller,在我的项目中,一个视频将被处理,然后经过一些效果,它将被播放。处理视频时,我想显示请稍候…消息 我使用UIAlertController显示警报,完成此过程后,我想隐藏警报 如果视频处理正确,警报将解除,但在某些情况下,处理失败解除也将不起作用!请注意,将调用discouse函数,但它不起作用 还有,我经常播放视频 class VGViewController: UIViewController { var player : VGPlayer? var url: URL?
请稍候…
消息
我使用UIAlertController
显示警报,完成此过程后,我想隐藏警报
如果视频处理正确,警报将解除
,但在某些情况下,处理失败解除
也将不起作用!请注意,将调用discouse
函数,但它不起作用
还有,我经常播放视频
class VGViewController: UIViewController {
var player : VGPlayer?
var url: URL?
var outputVideo: URL?
override func viewDidLoad() {
super.viewDidLoad()
showLoading()
DispatchQueue.global(qos: .userInitiated).async {
do {
guard let output = try effectVideo(fileURL: url) else {
DispatchQueue.main.async {
self.hideLoading()
}
return
}
outputVideo = output
} catch let e {
DispatchQueue.main.async {
self.hideLoading()
}
print("video error: ",e)
}
self.player = VGPlayer(URL: outputVideo)
self.player?.delegate = self
DispatchQueue.main.async {
self.hideLoading()
self.view.addSubview((self.player?.displayView)!)
self.player?.backgroundMode = .proceed
self.player?.play()
self.player?.displayView.delegate = self
self.player?.displayView.titleLabel.text = self.url!.lastPathComponent
self.player?.displayView.snp.makeConstraints { [weak self] (make) in
guard let strongSelf = self else { return }
make.edges.equalTo(strongSelf.view)
}
}
}
}
var alert: UIAlertController!
private func showLoading() {
alert = UIAlertController(title: nil, message: "Please wait.\nThis may take a few seconds...", preferredStyle: .alert)
let loadingIndicator = UIActivityIndicatorView(frame: CGRect(x: 10, y: 5, width: 50, height: 50))
loadingIndicator.translatesAutoresizingMaskIntoConstraints = false
loadingIndicator.hidesWhenStopped = true
loadingIndicator.style = UIActivityIndicatorView.Style.gray
loadingIndicator.startAnimating()
alert.view.addSubview(loadingIndicator)
present(alert, animated: true, completion: nil)
}
private func hideLoading() {
alert.dismiss(animated: true, completion: {print("**** alert dismiss called ****")})
}
}
尝试添加此选项以隐藏alertview
private func hideLoading() {
for subview in alert.view.subviews {
subview.removeFromSuperview()
}
alert.dismiss(animated: true, completion: {print("**** alert dismiss called ****")})
}
希望这能起作用。您是否有错误:“警告:尝试显示其视图不在窗口层次结构中的”UIAlertController:0x7fde1b080600“
在viewDidLoad
中,您的应用程序未显示ViewController
请尝试在
视图中执行该代码。谢谢。它可以工作,但现在用户无法使用导航返回到以前的ViewController
<代码>视图控制器
不响应点击,导航栏也不会显示。是否要显示屏幕设计UI添加此代码后会发生什么?只是好奇而已。如果您用延迟替换请求代码并将警报隐藏在其中,它是否正确地解除?视图的层次结构是私有的,因此。。。首先不应该向其中添加子视图。请尝试添加dispatch async->dispatch Queue.main.async{//your code}@RobertDresler谢谢。那我该怎么办?何时添加子视图?在视图中添加代码后,显示
一切正常。谢谢你能解释一下吗,发生了什么?错误是说你试图显示的UIAlertController低于ViewController的视图。奇怪:)我添加了你的代码,出现了这个错误。但不管怎样,UIAlertController似乎低于ViewController的视图。我如何才能看到控制器的顺序(哪个是顶部,哪个是底部)?