【问题标题】:Screenshotting on Iphone in swift only has a white backgroundswift中iPhone上的屏幕截图只有白色背景
【发布时间】:2014-10-31 09:42:40
【问题描述】:

一些背景:我只是想在我按下按钮后使用 xcode 6 beta 7 快速做一个简单的程序来截取 iphone。它是在 SiteKit 和游戏场景中完成的。背景是随机的 png 图像和“hello world”默认示例文本。我使用以下代码以编程方式在游戏场景的 didMoveToView 函数中放置了一个可按下的按钮(默认的飞船图像是按钮):

button.setScale(0.2)
screen.frame = CGRect(origin: CGPointMake(self.size.width/4, self.size.height/1.5), size: button.size)
screen.setImage(playAgainButton, forState: UIControlState.Normal)
screen.addTarget(self, action: "action:", forControlEvents: UIControlEvents.TouchUpInside)
self.view!.addSubview(screen)

这会在屏幕上设置我的可按下按钮,它链接到一个函数以使用以下代码截取屏幕截图:

func action(sender:UIButton!){
    UIGraphicsBeginImageContext(self.view!.bounds.size)
    self.view!.layer.renderInContext(UIGraphicsGetCurrentContext())
    let screenshot = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    UIImageWriteToSavedPhotosAlbum(screenshot, nil, nil, nil)
}

所以这段代码确实截取了屏幕截图,但是当我查看照片时,只显示了可按下的按钮,图像的其余部分是白色的。图片如下:

下面,我认为屏幕截图应该是这样的,因为这是模拟器中屏幕的样子(我只是使用了一些随机图像/文本作为背景):

谁能给我解释一下为什么截图程序不能同时拍摄背景照片以及如何修复它?

我在网上查看过,但没有看到任何可以解决我的问题的问题。在网上我看到了一些类似的问题并尝试了他们的修复:我导入了quartzCore、coreGraphics和coreImages,但没有修复。另外,我尝试使用 ViewController 并在那里设置一个 UIbutton 和一个 IBaction 来截屏,但仍然得到相同的白色背景图像。我尝试了不同的背景图像,结果相同。

我对编程相当陌生,因此,我们将不胜感激!先感谢您!

【问题讨论】:

标签: ios image swift sprite-kit screenshot


【解决方案1】:

您是否将背景设置为图案背景颜色? => 也许这对renderInContext 不起作用。

背景图像是在self.view 中呈现的,是作为子视图还是在其drawRect: 方法中? => 如果没有,当然不会渲染。

获取屏幕截图最简单的方法是使用函数

UIImage *_UICreateScreenUIImage();

你必须先声明它,因为它是一个未记录的函数。我不确定 Apple 是否会接受包含对此函数的调用的应用程序,但我认为没问题(我知道审查指南说你不能使用未记录的函数,但我认为他们不会在意这种情况.) 它在 iOS 5 - iOS 8 中可用并且可以工作(我已经测试过了。不关心 iOS 4。)

另一件也应该起作用的事情是渲染整个屏幕,而不仅仅是一个特定的视图:

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

(请注意,我将 view! 替换为 view!.window! 以获得唯一的窗口实例。)

【讨论】:

  • 抱歉,我对您的某些回复感到困惑。我对编程相当陌生,所以我不懂很多编程知识。让我们看看...对于第一个问题:我不确定您的意思。第二个问题背景设置为self.addChild(background)。那么我没有将其设置为子视图吗?第三个问题/部分,我会试试这个。第四部分,我试着把视图!.window!它没有用。顺便感谢您的快速回复!
  • @Michael 我有同样的问题,你的建议不起作用。现在我正在尝试使用 UICreateScreenUIImage()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-14
  • 1970-01-01
  • 2022-01-16
相关资源
最近更新 更多