はじめに
AmazonPrimeやNetflixでスクリーンショットをとると、黒塗り画面が保存されますよね。
今回はその実行方法が気になり調べたので、記事にまとめました。
方法
userDidTakeScreenshotNotification
っていう機能を使えば、
スクリーンショット後に処理を実行できるみたい。
実装
ViewController.swift
import UIKit
class ViewController: UIViewController {
// スクショ時、黒塗りするためのView
@IBOutlet weak var filterView: UIView!
override func viewDidLoad() {
super.viewDidLoad();
// 黒塗り画面を非表示
filterView.isHidden = false;
NotificationCenter.default.addObserver(
self,
selector: #selector(processing(_:)),
name: UIApplication.userDidTakeScreenshotNotification,
object: nil)
}
@objc private func processing(_ notification: Notification) {
// スクリーンショット時に黒塗り画面を表示
filterView.isHidden = true;
}
}
実行結果
実際に実行してみた。
スクリーンショット後に黒塗り画面が表示されることを確認!
ただ、保存される写真は黒塗りされていない...あれ、、、おかしい
原因
さらに調べてみたら、userDidTakeScreenshotNotification
はスクショを取った後に実行されるらしい。
要するに以下の順で処理が実行されているみたい。
- スクリーンショットボタンを押す
- 写真が保存される
- 画面が黒塗りになる
最後に
よくある動画配信アプリは他の方法で実装しているみたい。
(この方法はよく分からなかった、、、)
今回の機能は、保存する写真に対しては干渉できないが、スクショを検知することはできる。