如何以编程方式拍摄屏幕截图(Swift,SpriteKit)

时间:2014-12-30 18:59:17

标签: swift sprite-kit uigraphicscontext skview

我尝试了所建议的但是输出是一个白色的空白屏幕截图。这让我认为我还没有在视图中添加任何东西。以下是我在视图中添加图片的方法。 addChild方法附带SpriteKit,它接收SKSpriteNodes:

  addChild(background)
    addChild(rate)
    addChild(scoreLabel)
    addChild(share)
    addChild(playAgain)
    addChild(highScoreLabel)
    addChild(scoreBackground)
    addChild(highScoreBackground)

以下是获取屏幕截图的方法:

    UIGraphicsBeginImageContext(self.view!.bounds.size)
    self.view!.layer.renderInContext(UIGraphicsGetCurrentContext())
    let screenshot = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    UIImageWriteToSavedPhotosAlbum(screenshot, nil, nil, nil)

任何建议都会有所帮助

2 个答案:

答案 0 :(得分:11)

我认为这个问题可以与这个问题合并 Screenshotting on Iphone in swift only has a white background

看起来是一样的

编辑:

我想我找到了解决方案。 首先阅读这篇文章:How Do I Take a Screen Shot of a UIView?

我创建了一个Extensions.swift文件,其中我使用该链接“扩展”了UIView的方法。

之后我只需将以下内容连接到我的精灵工具包按钮

let screenshot = self.view?.pb_takeSnapshot()
UIImageWriteToSavedPhotosAlbum(screenshot, nil, nil, nil)

Voilà,图像在相机胶卷中!

答案 1 :(得分:3)

以下是我在swift 3中解决它的方法:它捕获场景中的所有节点: 注意:在下面的代码中表示它正在捕获的视图。您可能希望使用项目中的视图更新它。

func captureScreen() -> UIImage {
    UIGraphicsBeginImageContextWithOptions(yourview.bounds.size, true, 0)

    yourview.drawHierarchy(in: yourview.bounds, afterScreenUpdates: true)


    let image = UIGraphicsGetImageFromCurrentImageContext()!
    UIGraphicsEndImageContext()
    return image
}