2014-12-30 13 views
7

Próbowałem tego, co kiedykolwiek zasugerowano, ale wynik był biały, pusty zrzut ekranu. Co prowadzi mnie do założenia, że ​​nie dodałem nic do widoku. Oto, jak dodam grafikę do mojego widoku. Metoda addChild pochodzi z SpriteKit i trwa w SKSpriteNodes:Jak programowo wykonać zrzut ekranu (Swift, SpriteKit)

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

Oto metoda, która wykonuje zrzut ekranu:

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

Wszelkie sugestie byłoby pomocne

+0

Metoda addChild pochodzi ze środowiska SpriteKit. Nie jestem pewien, do czego to dodaje. Ale używam tego, aby sprawić, że sprite będą widoczne. Jednak kiedy używam metody zrzutów ekranu, zwraca biały, pusty zrzut ekranu. – htjohn

+0

Musisz zadzwonić do addChild na jakimś SKNode. Z opublikowanym przez Ciebie kodem nie jest jasne, do jakiego widoku lub węzła dodajesz je (jeśli istnieją). – mc01

+0

Oznaczyć mnie za co? Straciłem dwie punkty za co? To niedorzeczne i powinieneś się wstydzić. – htjohn

Odpowiedz

10

Myślę, że to pytanie może być scalony z tym jednym Screenshotting on Iphone in swift only has a white background

który wydaje się ten sam

EDYTOWANIE:

Myślę, że znalazłem rozwiązanie. Najpierw przeczytaj ten artykuł: How Do I Take a Screen Shot of a UIView?

Tworzę plik Extensions.swift, w którym "rozszerzyłem" metody UIView używając tego linku.

Potem wystarczy podłączyć następujące do mojego sprite-kit przycisku

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

voilà, obraz jest w rolki aparatu!

+0

Dziękujemy! Doceniam twoją odpowiedź. – htjohn

1

Oto, jak to rozwiązałem w trybie szybkim 3: Przechwytuje wszystkie węzły w twojej scenie: Uwaga: w poniższym kodzie reprezentuje widok, z którego przechwytuje. Możesz go zaktualizować swoim widokiem w projekcie.

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

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


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