Как сделать программный снимок экрана (Swift, SpriteKit)
Я пробовал, что когда-либо предлагалось, но выход был белым, пустым снимком экрана. Это заставляет меня предположить, что я ничего не добавил к мнению. Вот как я добавляю графику к моему представлению. Метод 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)
Любые предложения были бы полезны
Ответы
Ответ 1
Я думаю, что этот вопрос можно было бы объединить с этим
Скриншот на Iphone в swift только имеет белый фон
который кажется тем же самым
EDIT:
Думаю, я нашел решение.
Сначала прочитайте это сообщение: Как сделать снимок экрана UIView?
Я создаю файл Extensions.swift, в котором я "расширил" методы UIView, используя эту ссылку.
После этого я просто подключу следующее к моей кнопке спрайта
let screenshot = self.view?.pb_takeSnapshot()
UIImageWriteToSavedPhotosAlbum(screenshot, nil, nil, nil)
Voilà, изображение находится в кадре камеры!
Ответ 2
Вот как я решил это быстро: 3: Это захватывает все узлы в вашей сцене:
Примечание: в нижнем коде представлен вид, из которого он выполняется. Вы можете обновить его с помощью своего представления в проекте.
func captureScreen() -> UIImage {
UIGraphicsBeginImageContextWithOptions(yourview.bounds.size, true, 0)
yourview.drawHierarchy(in: yourview.bounds, afterScreenUpdates: true)
let image = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
return image
}