2017-04-06 8 views
7

나는 스크린 샷을 찍어서 사진 라이브러리에 저장하는 방법을 알고 있습니다. 아래 코드를 사용하여이 작업을 수행합니다. 내 레벨 장면 단추 이미지를 내 gameScene의 스크린 샷으로 바꾸고 싶습니다. 내 이미지 버튼이 150x150이라고 가정 해보십시오. 이것을 어떻게 할 수 있습니까? UIGraphicsGetImageFromCurrentImageContext으로레벨 버튼 이미지를 레벨 게임 장면의 스크린 샷으로 대체하려면 어떻게해야합니까?

func takeScreenShot(scene:SKScene) { 
    let bounds = self.scene!.view?.bounds 
    UIGraphicsBeginImageContextWithOptions(/*CGRect(x: 0, y: 0, width: 100, height: 100).size*/bounds!.size, true, UIScreen.main.scale) 
    self.scene?.view?.drawHierarchy(in: bounds!, afterScreenUpdates: true) 
    let screenshot = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 
    UIImageWriteToSavedPhotosAlbum(screenshot!, nil, nil, nil) 

} 


class LevelSelectScene: SKScene { 

let button1: SKSpriteNode = SKSpriteNode(imageNamed: "image1") 
let button2: SKSpriteNode = SKSpriteNode(imageNamed: "image2") 
let button3: SKSpriteNode = SKSpriteNode(imageNamed: "image3") 

        ... 

override init(size: CGSize){ 
super.init(size: size) 

button1.position = CGPoint(x: self.frame.width/4, y: self.frame.height/2) 
self.addChild(button1) 

button2.position = CGPoint(x: self.frame.width/2, y: self.frame.height/2) 
self.addChild(button2) 

button3.position = CGPoint(x: 3*self.frame.width/4, y: self.frame.height/2) 
self.addChild(button3) 

} 

답변

3

UIImage 반환하고 SKTextureSKTextureCGSize를 취하는 initialiser이있다 (나는 당신이 당신의 버튼에 사용하는 가정)을 UIImageSKSpriteNode를 취하는 initiaser을 가지고, 난 당신을 생각 당신이 필요한 모든 것을 가지고

if let screenshot = UIGraphicsGetImageFromCurrentImageContext() { 
    let screenShotTexture = SKTexture(image: screenshot) 
    let button = SKSpriteNode(texture: screenShotTexture, size: CGSize(width: 150, height: 150)) 
} 

이 사용을, 당신은 (당신이 다른 이유에 싶어하지 않는 한) 사진 앨범에 스크린 샷을 저장할 필요가 없다.

+0

물론 버튼 컬렉션을 만들고 싶다면 다양한 텍스처를 배열에 저장하면됩니다. –

+0

'screenshot'은 선택 사항입니다. – 0x141E