显示活动指示器以从 UIActivityViewController 共享到 Facebook?
Posted
技术标签:
【中文标题】显示活动指示器以从 UIActivityViewController 共享到 Facebook?【英文标题】:Display Activity Indicator for sharing to Facebook from UIActivityViewController? 【发布时间】:2017-03-19 07:53:30 【问题描述】:我有一个UIActivityViewController
,它允许将图像共享到 Facebook(如果配置了系统范围的 Facebook 帐户)。
这按预期工作,但一旦点击 Facebook 图标,在显示 Facebook 共享对话框之前会有几秒钟的延迟。图片已经在内存中,所以我不确定延迟是什么原因造成的,但我怀疑它一定是因为联系 Facebook 并等待回复。
从点击 Facebook 图标到出现对话框,我看不出有任何方法可以显示不确定的UIActivityIndicatorView
。有人知道方法吗?
【问题讨论】:
【参考方案1】:刚刚遇到类似的问题!我想对我的 Web 应用程序执行 HTTP 调用,这是必要的,因此我将获得推文的 URL。 (在我的例子中,它更加复杂,因为对 Web 应用程序的调用也在异步线程上。)有两种方法可以做到这一点......您可以将 Activity Indicator View 添加到情节提要并创建 IBActions,如下所述: http://sourcefreeze.com/uiactivityindicatorview-example-using-swift-in-ios/
我发现通过代码添加UIActivityIndicatorView
更简单。作为班上的一员:
let activityIndicator = UIActivityIndicatorView( activityIndicatorStyle: UIActivityIndicatorViewStyle.gray )
我在新方法中添加了 startAnimating()
和 stopAnimating()
调用:
func startActtivityIndicator()
activityIndicator.center = self.view.center
activityIndicator.hidesWhenStopped = true
self.view.addSubview( activityIndicator )
activityIndicator.startAnimating()
func stopActtivityIndicator()
activityIndicator.stopAnimating()
activityIndicator.removeFromSuperview()
然后调用startActivityIndicator()
作为您在按钮处理程序中的第一个操作,并在显示Facebook 分享之前调用stopActtivityIndicator()
。在我的例子中,由于我想结束指示器并显示推文框(使用SLComposeViewController
响应异步 http 请求,我不得不以这种方式回调到主线程的 stop 方法:
DispatchQueue.main.async(execute: () -> Void in
self.stopActtivityIndicator()
)
【讨论】:
我没有使用按钮处理程序 - 该按钮由 Apple 的 SDK 处理。当从 UIActivityViewController 中点击 Facebook 按钮时,我没有收到任何事件;这就是问题所在。 啊,知道了,这真的是关于 Facebook 分享屏幕出现延迟的问题。虽然他们没有直接解决这种情况,但***.com/questions/13519904/… 中的一些答案可能会有所帮助。一个描述了如何预加载SLComposeViewController
以使其更快,另一个建议异步加载它以防止应用程序变慢以上是关于显示活动指示器以从 UIActivityViewController 共享到 Facebook?的主要内容,如果未能解决你的问题,请参考以下文章