SVProgressHUD 在显示另一条消息后不显示
Posted
技术标签:
【中文标题】SVProgressHUD 在显示另一条消息后不显示【英文标题】:SVProgressHUD doesnt show after showing another message 【发布时间】:2015-09-14 13:26:19 【问题描述】:我正在尝试使用 SVProgressHUD 显示微调器,当我从服务器获得异步响应时,关闭该 hud 并显示另一个带有从服务器接收到的消息的 hud。
override func viewDidAppear(animated: Bool)
super.viewDidAppear(animated)
SVProgressHUD.setDefaultStyle(.Custom)
SVProgressHUD.setForegroundColor(UIColor.whiteColor())
SVProgressHUD.setBackgroundColor(UIColor.clearColor())
SVProgressHUD.setDefaultMaskType(SVProgressHUDMaskType.Clear)
SVProgressHUD.show()
loadData()
private func loadData()
ApiService.getData (succeed, message) -> () in
dispatch_async(dispatch_get_main_queue(), () -> Void in
self.dismissHud()
)
dispatch_async(dispatch_get_main_queue(), () -> Void in
SVProgressHUD.showInfoWithStatus("I can't see this")
)
如果我删除 viewDidAppear 中显示 HUD 的代码,我可以看到该消息。 有任何想法吗?谢谢
【问题讨论】:
我认为您的dissmisshud
代码隐藏了所有显示在 Windows 中的 hud。并且可能是shoinfowithstatus
在dissmisshud
方法之前调用,请通过断点检查。
不,第 33 行在 36 之前执行。我还尝试在调用 dismissHud() 之后显示 hud。
有两个问题,首先为什么要分派到同一个线程两次?其次,如果您只想显示 HUD,请不要关闭它。 SVProgressHUD.showInfoWithStatus
将在一段时间后隐藏该消息。您没有看到第二个 HUD 的原因是它仍然删除了第一个。既然您只想更新,请不要调用驳回。
在我的脑海中...保留周期?在(succeed, message ...
前面加上[weak self]
,可能self不再可用。 (尽管我认为它会崩溃)
rckones,你是对的,如果我不关闭 hud,我可以显示另一条消息。是的,两次分派到同一个线程没有任何意义,对不起。
【参考方案1】:
有两个问题,首先为什么要分派到同一个线程两次?其次,如果您只想显示 HUD,请不要关闭它。
SVProgressHUD.showInfoWithStatus
将在一段时间后隐藏该消息。 您没有看到第二个 HUD 的原因是它仍在删除第一个 HUD。既然您只想更新,请不要调用驳回。
【讨论】:
【参考方案2】:我已将 FadeInAnimationDuration
和 FadeoutAnimationDuration
更改为 0.0
,它对我来说很好用。
我正在使用这样的HUD:
显示HUD:
func showActivityLoader()
dispatch_async(dispatch_get_main_queue(),
SVProgressHUD.setFadeInAnimationDuration(0.0)
SVProgressHUD.setFadeOutAnimationDuration(0.0)
SVProgressHUD.setDefaultMaskType(SVProgressHUDMaskType.Clear)
SVProgressHUD.show()
)
隐藏HUD:
func dismissActivityLoader()
dispatch_async(dispatch_get_main_queue(),
SVProgressHUD.dismiss()
)
【讨论】:
以上是关于SVProgressHUD 在显示另一条消息后不显示的主要内容,如果未能解决你的问题,请参考以下文章
UIImageview 被添加到另一个子视图 UIScrollview 后不显示
Firebase消息通知在Android pie上强制终止后不显示通知