2014-09-06 187 views
2

一些背景:我只是试图做一个简单的程序使用xcode 6测试版7在迅速截图iphone后按下按钮。它在SpiteKit和游戏场景中完成。背景是一个随机的PNG图像和“hello world”默认示例文本。我编程放压能按钮(默认飞船图像的按钮)在gamescene didMoveToView功能使用下面的代码:截图在iPhone上迅速只有一个白色背景

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) 
} 

所以这个代码采取截图,但是当我看着照片,只压按钮可以显示与图像的其余部分是白色的。图像显示如下:

screenshot

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

enter image description here

有人能向我解释为什么截图程序是不是也考虑背景的图片,以及如何解决它?

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

我是相当新的编程,所以,任何帮助将不胜感激!先谢谢你!

+0

我发现了一个H液ere:http:// stackoverflow。com/a/27764590/1139044 – Nicholas 2015-01-04 10:39:38

+0

我想你可以在这里找到你的问题的答案:http://stackoverflow.com/a/27764590/1139044 – Nicholas 2015-01-07 09:12:32

回答

1

你是否将背景设置为图案背景颜色? =>也许这不符合renderInContext的预期。

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

获得的截图最简单的方法是用功能

UIImage *_UICreateScreenUIImage(); 

你必须先声明它,因为它的一个未公开的函数。我不确定苹果是否会接受一个包含此功能调用的应用程序,但我认为它会好起来的(我知道评论准则说你不能使用无证函数,但我认为他们不会在意这种情况)它可以在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!得到唯一的一个窗口实例。)

+0

对不起,我对你的一些回应感到困惑。我对编程相当陌生,所以我不了解很多编程内容。让我们看看......对于第一个问题:我不确定你的意思。第二个问题背景设置为self.addChild(背景)。我是不是将它设置为子视图?第三个问题/部分,我会试一试。第四部分,我试图把视图!窗口!并没有奏效。感谢您的快速回复! – Kirby 2014-09-06 17:54:26

+0

@迈克尔我有同样的问题,你的建议不起作用。现在我正在尝试使用UICreateScreenUIImage() – Nicholas 2015-01-04 10:21:59