加载 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)
}
我遇到的问题是当我加载这个 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)
}