2017-11-09 4 views
1

アラートを表示するときにスクリーンショットを撮っていますが、これはスクリーンショットを撮るときに機能しますが、カメラロールに保存されているときには、スクリーンショットにアラートを含めました。アラート、iOS、スウィフトのスクリーンショット

これは可能ですか?

以下は私のコードです。

func ScreenShot() { 
    //Create the UIImage 
    UIGraphicsBeginImageContextWithOptions(view.frame.size, true, 0) 
    guard let context = UIGraphicsGetCurrentContext() else { return } 
    view.layer.render(in: context) 
    guard let image = UIGraphicsGetImageFromCurrentImageContext() else { return } 
    UIGraphicsEndImageContext() 

    //Save it to the camera roll 
    UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil) 
} 

ここでキャリングしています。

func alertShow() { 

    let alert = UIAlertController(title: "ALERT!!!", message: "Message stuff", preferredStyle: UIAlertControllerStyle.alert) 


    alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: { action in 

     self.performSegue(withIdentifier: "toMainInfoVC", sender: nil) 

    })) 

    self.present(alert, animated: true, completion: nil) 
    ScreenShot() 
} 

答えて

2

私はあなたのコードには二つの問題があります

let layer = UIApplication.shared.keyWindow!.layer 
let scale = UIScreen.main.scale 
UIGraphicsBeginImageContextWithOptions(layer.frame.size, false, scale); 

layer.render(in: UIGraphicsGetCurrentContext()!) 
+0

はこのいただきありがとうございます、これは助け、それはまだそれをしなかったが、それは他のすべてのスクリーンショットでしたアラートの完了に終わった別の場所。それで、うまくいきました、ありがとうございました –

2

キーウィンドウの完全なレイヤーが必要だと思います。まず、アラートが表示される前にすぐにスナップショットを撮ろうとしています。あなたが現在のcompeletionハンドラであなたのスナップショット機能を呼び出すshoudl:

self.present(alert, animated: true) { self.ScreenShot() }

第二に、あなたは、現在のビューをレンダリングしている、とアラートがあなたのViewControllerのビューのサブビューではありません。あなたは、全体ではなく、ウィンドウの階層構造をレンダリングしたい:私は私がスクリーンショットトリガを配置するために知っていた

view.window?.layer.render(in: context)

+0

このジョシュについてのあなたの答えをありがとう、私は上記の答えで働いていました、そして、私は関数呼び出しの位置を変更する必要があり、それを現在のアラート。しかし、これにスポットを当てて、あなたの時間をThakしてください。 –

関連する問題