2014-12-30 19 views
7

Ho provato ciò che è stato suggerito ma l'output era uno screenshot bianco e vuoto. Il che mi porta a pensare di non aver aggiunto nulla alla vista. Ecco come aggiungo grafica alla mia vista. Il metodo addChild viene fornito con lo SpriteKit e prende in SKSpriteNodes:Come scattare la schermata a livello di programma (Swift, SpriteKit)

addChild(background) 
    addChild(rate) 
    addChild(scoreLabel) 
    addChild(share) 
    addChild(playAgain) 
    addChild(highScoreLabel) 
    addChild(scoreBackground) 
    addChild(highScoreBackground) 

Ecco il metodo che accetta lo screenshot:

UIGraphicsBeginImageContext(self.view!.bounds.size) 
    self.view!.layer.renderInContext(UIGraphicsGetCurrentContext()) 
    let screenshot = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 
    UIImageWriteToSavedPhotosAlbum(screenshot, nil, nil, nil) 

Qualsiasi suggerimento sarebbe utile

+0

il metodo addChild viene fornito con il framework SpriteKit. Non sono sicuro di cosa li stia aggiungendo. Ma lo uso per rendere visibili gli sprite. Tuttavia quando uso il metodo screenshot restituisce uno screenshot bianco, vuoto. – htjohn

+0

Devi chiamare addChild su qualche SKNode. Con il codice che hai pubblicato non è chiaro quale vista o nodo stai aggiungendo (se c'è) – mc01

+0

Marcandomi per cosa? Ho perso due punti per cosa? Questo è ridicolo e voi ragazzi dovreste vergognarvi. – htjohn

risposta

10

Credo che questa domanda potrebbe essere unito a questo Screenshotting on Iphone in swift only has a white background

che sembra lo stesso

MODIFICA:

Penso di aver trovato una soluzione. Prima leggi questo post: How Do I Take a Screen Shot of a UIView?

Creo un file Extensions.swift in cui ho "esteso" i metodi di un UIView usando quel collegamento.

Dopo che ho semplicemente collegare il seguente al mio pulsante sprite-kit

let screenshot = self.view?.pb_takeSnapshot() 
UIImageWriteToSavedPhotosAlbum(screenshot, nil, nil, nil) 

Voilà, l'immagine è nel rullino fotografico!

+0

Grazie! Apprezzo la tua risposta. – htjohn

1

Ecco come ho risolto in swift 3: Cattura tutti i nodi nella scena: Nota: nel codice sottostante rappresenta la vista da cui viene catturato. Potresti aggiornarlo con la tua vista nel progetto.

func captureScreen() -> UIImage { 
    UIGraphicsBeginImageContextWithOptions(yourview.bounds.size, true, 0) 

    yourview.drawHierarchy(in: yourview.bounds, afterScreenUpdates: true) 


    let image = UIGraphicsGetImageFromCurrentImageContext()! 
    UIGraphicsEndImageContext() 
    return image 
}