调用 URLSession 后我不能做其他工作
I can not do other work after calling URLSession
我只想在音频开始播放时隐藏imageview
URLSession.shared.dataTask(with: serverUrl!) { [self] (data, res, error) in
do {
self.myMediaPlayer1 = try AVAudioPlayer(data: data!)
self.myMediaPlayer1.prepareToPlay()
self.myMediaPlayer1.delegate = self
self.SetSessionPlayerOn()
self.loading_img.isHidden = true // not work til audio finish playing
print("imageview should be hidden now")
self.myMediaPlayer1.play()
}catch let error {
print("error!!!!!!!!!!")
}
}.resume()
我可以一次打印,但图像视图只有在媒体播放器播放完毕后才会隐藏!
更新
现在可以了。谢谢Tushar
DispatchQueue.main.async { [unowned self] in
self.loading_img.isHidden = true
}
首先,您应该只在主线程上更新 UI。所以你必须在 dataTask 中添加下面的代码。之后,您应该更新视图的布局以更新 UI。所以代码应该是这样的:
URLSession.shared.dataTask(with: serverUrl!) { [self] (data, res, error) in
do {
self.myMediaPlayer1 = try AVAudioPlayer(data: data!)
self.myMediaPlayer1.prepareToPlay()
self.myMediaPlayer1.delegate = self
self.SetSessionPlayerOn()
DispatchQueue.main.async {
self.loading_img.isHidden = true
self.view.layoutIfNeeded()
print("imageview should be hidden now")
}
self.myMediaPlayer1.play()
}catch let error {
print("error!!!!!!!!!!")
}
}.resume()
我只想在音频开始播放时隐藏imageview
URLSession.shared.dataTask(with: serverUrl!) { [self] (data, res, error) in
do {
self.myMediaPlayer1 = try AVAudioPlayer(data: data!)
self.myMediaPlayer1.prepareToPlay()
self.myMediaPlayer1.delegate = self
self.SetSessionPlayerOn()
self.loading_img.isHidden = true // not work til audio finish playing
print("imageview should be hidden now")
self.myMediaPlayer1.play()
}catch let error {
print("error!!!!!!!!!!")
}
}.resume()
我可以一次打印,但图像视图只有在媒体播放器播放完毕后才会隐藏!
更新 现在可以了。谢谢Tushar
DispatchQueue.main.async { [unowned self] in
self.loading_img.isHidden = true
}
首先,您应该只在主线程上更新 UI。所以你必须在 dataTask 中添加下面的代码。之后,您应该更新视图的布局以更新 UI。所以代码应该是这样的:
URLSession.shared.dataTask(with: serverUrl!) { [self] (data, res, error) in
do {
self.myMediaPlayer1 = try AVAudioPlayer(data: data!)
self.myMediaPlayer1.prepareToPlay()
self.myMediaPlayer1.delegate = self
self.SetSessionPlayerOn()
DispatchQueue.main.async {
self.loading_img.isHidden = true
self.view.layoutIfNeeded()
print("imageview should be hidden now")
}
self.myMediaPlayer1.play()
}catch let error {
print("error!!!!!!!!!!")
}
}.resume()