如何使用Swift将屏幕截图分享到Facebook?

时间:2015-12-15 17:42:05

标签: ios facebook swift share social

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

我一直在观看一些关于如何实现Facebook共享按钮的教程:http://www.subdomain.domain.com

但这些只显示我如何在Facebook上分享信息,而且我仍然有点混淆如何分享用户当前正在与之交互的整个屏幕。

3 个答案:

答案 0 :(得分:10)

直接与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在下面的评论中指出的那样,此呈现代码不会包含应用程序之外的任何内容,例如其他应用程序或系统控件。

答案 1 :(得分:4)

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

从iOS 9开始,API不再有效

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

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

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

答案 2 :(得分:1)

swift 3

echo "${check[@]}"

# or
declare -p check