【问题标题】:How share a screenshot to Facebook using Swift?如何使用 Swift 将屏幕截图分享到 Facebook?
【发布时间】:2016-03-21 15:20:20
【问题描述】:

我需要在我的应用程序的一个视图控制器上设置一个 Facebook 分享按钮,这样当用户按下它时,它会将用户当前屏幕的屏幕截图分享给 Facebook。

我一直在看一些教程,比如这个关于如何实现 Facebook 分享按钮的教程:https://www.youtube.com/watch?v=774_-cTjnVM

但这些只显示了我如何在 Facebook 上分享消息,我仍然有点困惑如何分享用户当前正在与之交互的整个屏幕。

【问题讨论】:

  • 您的意思是要按字面意思分享用户看到的内容,即屏幕截图?
  • 是的,这正是我想要做的。

标签: ios facebook swift share social


【解决方案1】:

直接分享到 Facebook 并不难。首先,导入Social 框架:

import Social

现在将其添加为按钮的操作:

let screen = UIScreen.mainScreen()

if let window = UIApplication.sharedApplication().keyWindow {
    UIGraphicsBeginImageContextWithOptions(screen.bounds.size, false, 0);
    window.drawViewHierarchyInRect(window.bounds, afterScreenUpdates: false)
    let image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    let composeSheet = SLComposeViewController(forServiceType: SLServiceTypeFacebook)
    composeSheet.setInitialText("Hello, Facebook!")
    composeSheet.addImage(image)

    presentViewController(composeSheet, animated: true, completion: nil)
}

您可能有兴趣知道UIActivityViewController 允许用户分享到 Facebook 以及其他服务。上面的代码是针对您的确切问题:分享到 Facebook。此代码呈现整个可见屏幕;如果需要,您还可以让各个视图自己呈现。

注意:正如 Duncan C 在下面的评论中指出的那样,此渲染代码不会包含您应用之外的任何内容,例如其他应用或系统控件。

【讨论】:

  • 这个问题我能得到的最佳答案!非常感谢双吸管。是时候去研究我还有的工作代码了,现在:)
  • 不客气!至少我希望我能给你一些关于谷歌的好建议,如果它只有 95% 能解决你的问题。祝你好运!
  • 程序点:该代码将呈现您的应用程序的整个窗口内容,但不会呈现属于另一个应用程序或系统的任何内容。
  • @DuncanC 你说得对;我将在我的回答中澄清这一点。同样,ReplayKit 如何以类似的方式自动过滤掉安全信息给我留下了深刻的印象。
  • 您的代码未在共享弹出窗口中显示标题
【解决方案2】:

在 iOS 8 和更早版本中,曾经有一个私有框架,您可以使用它来捕获整个屏幕。使用该框架会导致您的应用被应用商店拒绝,但至少它有效。

从 iOS 9 开始,API 不再工作

您能做的最好的事情就是捕捉应用的视图。这不包括状态栏或系统或其他应用程序绘制的其他内容。

一种方法是创建离屏上下文,将要捕获的父视图渲染到离屏上下文中(可能使用drawViewHierarchyInRect:afterScreenUpdates:,将上下文中的数据加载到 UIImage 中,然后关闭上下文.

另一种方法是新的 API,它将捕获视图层次结构的快照。捕获快照的新方法之一是snapshotViewAfterScreenUpdates。这会创建专门的快照视图。

【讨论】:

  • 非常感谢 Duncan,阅读您的 cmets 以及 TwoStraws 在此线程上提供的代码对于更好地了解情况非常有帮助和洞察力。我真的很感激。
【解决方案3】:

迅速 3

    let screen = UIScreen.main

    if let window = UIApplication.shared.keyWindow {
        UIGraphicsBeginImageContextWithOptions(screen.bounds.size, false, 0);
        window.drawHierarchy(in: window.bounds, afterScreenUpdates: false)
        let image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();

        let composeSheet = SLComposeViewController(forServiceType: SLServiceTypeFacebook)
        composeSheet?.setInitialText("Hello, Facebook!")
        composeSheet?.add(image)

        present(composeSheet!, animated: true, completion: nil)
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多