如何以编程方式截屏(Swift、SpriteKit)

Posted

技术标签:

【中文标题】如何以编程方式截屏(Swift、SpriteKit)【英文标题】:How to take screen shot programmatically (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。使用您发布的代码,不清楚您要将它们添加到哪个视图或节点(如果有) 标记我是为了什么?我为什么丢了两分?这太荒谬了,你们应该感到羞耻。 【参考方案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)

瞧,图片在相机胶卷中!

【讨论】:

谢谢!感谢您的回答。

以上是关于如何以编程方式截屏(Swift、SpriteKit)的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Xcode 8 和 Swift 3 在 SpriteKit 中以编程方式触发 segue

如何在 spritekit 中使用页面控件? (以编程方式)

如何以编程方式在 Android 上截屏?

Swift/SpriteKit - ApplyImpluse 的速度是不是以增量方式工作(每次都添加到先前的值)?

以编程方式在 iPad 中截屏

SpriteKit:以编程方式修改 SKScene 框架