質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
TableView

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1276閲覧

ボタンを押すとスクリーンショットを取れるようにしたい

enohpi

総合スコア45

TableView

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

2クリップ

投稿2018/03/04 02:20

編集2018/03/04 02:25

###前提・実現したいこと
Xcode 9 Swift 4 です。

アプリ内のボタンを押すと、TableViewの上から下までのスクリーンショットを撮り、それをカメラロール内に保存することをしたいと思っています。

以前あるアプリで、「ボタンを押すと、ScrollViewの上から下までを撮影し、それをカメラロールに保存する」という機能を見たことがあるので、おそらくボタンを押すとスクリーンショットを撮ることはできると考えています。

調べてみたのですが、ボタンを押すとスクリーンショットを撮影できる機能について書かれた記事が見つかりませんでした。

端末のホームボタンと電源ボタンを押してのスクリーンショットではなく、アプリ内ボタンでのスクリーンショットをしたいと思っています。

このような機能について書かれている記事をご存知の方、あるいはこの機能を実装するためのヒントになるようなコードを知っている方がいらっしゃったら教えて頂けますでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

以下のメソッドをボタンを押した際に呼び出して取得したUIImageを保存するのはいかがでしょうか?

Swift

1func getScreenShot(windowFrame: CGRect) -> UIImage { 2 3 /* let rect = self.view.bounds */ <-この行は不要でしたすいません 4  // ↓変更 5 UIGraphicsBeginImageContextWithOptions(windowFrame.size, false, 0.0) 6 let context: CGContext = UIGraphicsGetCurrentContext()! 7 self.view.layer.render(in: context) 8 let capturedImage : UIImage = UIGraphicsGetImageFromCurrentImageContext()! 9 UIGraphicsEndImageContext() 10 11 return capturedImage 12}

【追記】
以下の方法でカメラロールに保存できます。

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

イメージ説明

投稿2018/03/04 03:01

編集2018/03/07 21:55
newmt

総合スコア1277

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

enohpi

2018/03/04 12:10

素早い回答ありがとうございました。 教えてくださったコードを打ち込み、呼び出すだけなのですが、初心者で理解できていなくて、呼び出し方がわかりません。 何度も申し訳ないのですが、呼び出し方も教えていただけないでしょうか。 @IBOutlet weak var Button: UIBarButtonItem! @IBAction func Button Tapped(_ sender: UIBar ButtonItem) { }
newmt

2018/03/04 21:20

storyboard上でButtonを選び、 ctlを押しながら出てくる青いビームみたいなものを @IBAction func ButtonTapped(_ sender: UIBar ButtonItem)に繋げると ButtonをタップしたときにButtonTappedが呼ばれるようになります。 そこで呼び出しをします。 @IBAction func ButtonTapped(_ sender: UIBar ButtonItem) {   // スクリーンを取得 let image = getScreenShot(self.view.bounds) }
enohpi

2018/03/07 13:10

確認が遅れてしまい申し訳ありません。 丁寧にありがとうございます。 selfの前にwindowFrame: を入れて、警告が出てしまったので、let imageを_に変えて、実機シュミレーターとコンピュータのシュミレーターでボタンを押してみたのですが、カメラロールにうまく保存出来ませんでした。 保存するためには、またさらに別のコードを打たなければいけないのでしょうか。 色々とすみません。回答よろしくお願いします。
newmt

2018/03/07 21:55

回答を追記しました。こちらでいかがでしょうか?
enohpi

2018/03/08 13:09

写真付きで丁寧にありがとうございました。 無事スクリーンショットを撮って保存する機能が完成しました。 本当に色々とありがとうございました。 何かわからないことがあったときには、また質問するかもしれないので、その時はまたよろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問