加载 uiview 时黑屏

black screen when I load a uiview

我遇到的问题是当我加载这个 UIViewController.removeSpinner(微调器:self.view)

它给我一个空白的黑色视图,我不知道如何从按钮函数访问 sv 变量:

让 sv = UIViewController.displaySpinner(onView: self.view)

我正在使用这个 extintion 来加载微调器并删除 http://brainwashinc.com/2017/07/21/loading-activity-indicator-ios-swift/

我实际上想做什么:

1- 收到 url 条语音消息。

2- 运行 加载播放器的微调器。

3-播放。

4- 如果观察者发现它已结束,请移除微调器。

这是我的代码:

 @IBAction func vnClick(_ sender: UIButton) {
    let vnInfo = itemss[sender.tag]
    print(vnInfo.vnUrl)
    let sv = UIViewController.displaySpinner(onView: self.view)
    if let url = NSURL(string: vnInfo.vnUrl) {
        player = AVPlayer(url: url as URL)
        player.play()
        //check if ended playing to remove spinner
        NotificationCenter.default.addObserver(self,  selector:#selector(playerDidFinishPlaying(note:)),name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: player.currentItem)


    }
}
@objc func playerDidFinishPlaying(note: NSNotification) {
    UIViewController.removeSpinner(spinner: self.view)
}

你可能应该做一些更像

private var sv : UIView?
 @IBAction func vnClick(_ sender: UIButton) {
    let vnInfo = itemss[sender.tag]
    print(vnInfo.vnUrl)
    sv = UIViewController.displaySpinner(onView: self.view)
    if let url = NSURL(string: vnInfo.vnUrl) {
        player = AVPlayer(url: url as URL)
        player.play()
        //check if ended playing to remove spinner
        NotificationCenter.default.addObserver(self,  selector:#selector(playerDidFinishPlaying(note:)),name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: player.currentItem)
    }
}

@objc func playerDidFinishPlaying(note: NSNotification) {
    if let sv = sv {
        UIViewController.removeSpinner(spinner: sv) 
    }
}

你的错误是你在此处传递 self.view,这将删除视图

UIViewController.removeSpinner(微调器:self.view)在 playerDidFinishPlaying()

你需要这样做,将 spinnerview 对象放在按钮点击之外,

var spinnerView: UIView!

然后赋值,

spinnerView = UIViewController.displaySpinner(onView: self.view)

并且在移除时,传递 spinnerview 而不是 self.view

UIViewController.removeSpinner(spinner: self.spinnerView)

代码会像,

@IBAction func vnClick(_ sender: UIButton) {
let vnInfo = itemss[sender.tag]
print(vnInfo.vnUrl)
spinnerView = UIViewController.displaySpinner(onView: self.view)
if let url = NSURL(string: vnInfo.vnUrl) {
    player = AVPlayer(url: url as URL)
    player.play()
    //check if ended playing to remove spinner
    NotificationCenter.default.addObserver(self,  selector:#selector(playerDidFinishPlaying(note:)),name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: player.currentItem)
}
}

@objc func playerDidFinishPlaying(note: NSNotification) {
    UIViewController.removeSpinner(spinner: self.spinnerView)
}