質問: ### 前提・実現したいこと Xcode 9 Swift 4 です。 アプリ内のボタンを押すと、TableViewの上から下までのスクリーンショットを撮り、それをカメラロール内に保存することをしたいと思っています。 以前あるアプリで、「ボタンを押すと、ScrollViewの上から下までを撮影し、それをカメラロールに保存する」という機能を見たことがあるので、おそらくボタンを押すとスクリーンショットを撮ることはできると考えています。 調べてみたのですが、ボタンを押すとスクリーンショットを撮影できる機能について書かれた記事が見つかりませんでした。 端末のホームボタンと電源ボタンを押してのスクリーンショットではなく、アプリ内ボタンでのスクリーンショットをしたいと思っています。 このような機能について書かれている記事をご存知の方、あるいはこの機能を実装するためのヒントになるようなコードを知っている方がいらっしゃったら教えて頂けますでしょうか。
回答: 以下のメソッドをボタンを押した際に呼び出して取得したUIImageを保存するのはいかがでしょうか? ``` func getScreenShot(windowFrame: CGRect) -> UIImage { /* let rect = self.view.bounds */ <-この行は不要でしたすいません // ↓変更 UIGraphicsBeginImageContextWithOptions(windowFrame.size, false, 0.0) let context: CGContext = UIGraphicsGetCurrentContext()! self.view.layer.render(in: context) let capturedImage : UIImage = UIGraphicsGetImageFromCurrentImageContext()! UIGraphicsEndImageContext() return capturedImage } ``` 【追記】 以下の方法でカメラロールに保存できます。 ``` let image = getScreenShot(windowFrame: self.view.bounds) UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil) ``` また、もうされているかもしれませんが、info.plistに以下に2つの項目の設定が必要になります。 ・NSCameraUsageDescription Privacy – Camera Usage Description ・NSPhotoLibraryAddUsageDescription Privacy – Photo Library Additions Usage Description !イメージ説明