Как сделать программный снимок экрана (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
}