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