如何通过编程方式截屏(使用Swift、SpriteKit)

11

我尝试了建议的所有方法,但输出是一个白色的、空白的截图。这让我认为我没有在视图中添加任何内容。下面是我如何向我的视图添加图形的方式。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)

有什么建议都可以提出来,谢谢。


addChild方法是SpriteKit框架自带的。我不确定它添加到哪里了。但我用它来使精灵可见。然而,当我使用截图方法时,它返回一个白色、空白的截图。 - htjohn
你需要在某个SKNode上调用addChild。根据你发布的代码,无法确定你将它们添加到哪个视图或节点(如果有的话)。 - mc01
扣我的分数是为了什么?我失去了两分是为了什么?这太荒谬了,你们应该感到羞耻。 - htjohn
2个回答

12

我认为这个问题可以与这个问题合并:在Swift中截取iPhone屏幕只有白色背景

两个问题看起来很相似。

编辑:

我觉得我找到了一个解决方案。首先阅读这篇文章:如何截取UIView的屏幕截图?

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

之后,我只需将以下内容连接到我的SpriteKit按钮即可:

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

看,照片已经保存在相机胶卷中啦!


谢谢!我很感激你的回答。 - htjohn

4

以下是我在Swift 3中解决它的方法:这会捕获您场景中的所有节点: 注意:下面的代码中的 in 表示它所捕获的视图。您可能需要使用您项目中的视图进行更新。

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

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


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接