如何以编程方式截屏(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 中使用页面控件? (以编程方式)