Скриншот на Iphone в быстрой только имеет белый фон

Некоторые предпосылки: я просто пытаюсь сделать простую программу, используя xcode 6 beta 7 в быстрой картине iphone после нажатия кнопки. Это делается в SpiteKit и в игровой сцене. Фон представляет собой случайное png-изображение и образец текста по умолчанию "hello world". Я программно помещаю нажатую кнопку (образ космического корабля по умолчанию - кнопка) в функции gamescene 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)
}

Таким образом, этот код делает снимок экрана, но когда я смотрю фотографии, отображается только кнопка с нажатой кнопкой, а остальная часть изображения - белая. Изображение показано ниже:

screenshot

Ниже я думаю, что экранный снимок должен выглядеть так, как это выглядит на экране в симуляторе (я просто использовал некоторые случайные изображения/текст в качестве фона):

enter image description here

Может кто-нибудь объяснить мне, почему программа скриншотов также не делает снимок фона и как его исправить?

Я смотрел онлайн, и я не видел вопроса, который является решением моей проблемы. В сети я видел некоторые подобные проблемы и проверял их исправления: я импортировал quartzCore, coreGraphics и coreImages, но без исправлений. Кроме того, я попытался использовать ViewController и установил UIbutton там с IBaction для снятия снимков, но все равно получаю то же белое фоновое изображение. Я пробовал разные фоновые изображения с тем же результатом.

Я новичок в программировании, поэтому любая помощь будет оценена! Заранее спасибо!

Ответ 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!, чтобы получить единственный экземпляр окна.)