显示活动指示器以从 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?的主要内容,如果未能解决你的问题,请参考以下文章

在 UIImageView 中显示活动指示器

在 UICollectionView 页脚中显示活动指示器

集成到搜索栏中的活动指示器不会显示在iPhone SDK中

从服务器获取数据时如何显示活动指示器

在 UIActivityItemProvider 活动期间显示进度指示器

iOS 网络活动指示器未显示