【问题标题】:How to take screen shot programmatically (Swift, SpriteKit)如何以编程方式截屏(Swift、SpriteKit)
【发布时间】:2015-02-26 22:42:13
【问题描述】:

我尝试了任何建议,但输出是白色的空白屏幕截图。这使我假设我没有在视图中添加任何内容。这是我如何将图形添加到我的视图中。 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 框架自带的。我不确定它将它们添加到什么。但我用它来使精灵可见。但是,当我使用 screenshot 方法时,它会返回一个白色的空白屏幕截图。
  • 您必须在某个 SKNode 上调用 addChild。使用您发布的代码,不清楚您要将它们添加到哪个视图或节点(如果有)
  • 标记我是为了什么?我为什么丢了两分?这太荒谬了,你们应该感到羞耻。

标签: swift sprite-kit uigraphicscontext skview


【解决方案1】:

这是我在 swift 3 中解决的方法:这会捕获场景中的所有节点: 注意:在下面的代码中代表它正在捕获的视图。你可能想用你在项目中的视图来更新它。

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

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


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

【讨论】:

    【解决方案2】:

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

    好像是一样的

    编辑:

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

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

    之后,我只需将以下内容连接到我的 sprite-kit 按钮

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

    瞧,图片在相机胶卷中!

    【讨论】:

    • 谢谢!感谢您的回答。
    猜你喜欢
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-02
    相关资源
    最近更新 更多