2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

iOSアプリでスクショをトリガーにする方法

Posted at

はじめに

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はスクショを取った後に実行されるらしい。
要するに以下の順で処理が実行されているみたい。

  1. スクリーンショットボタンを押す
  2. 写真が保存される
  3. 画面が黒塗りになる

最後に

よくある動画配信アプリは他の方法で実装しているみたい。
(この方法はよく分からなかった、、、)
今回の機能は、保存する写真に対しては干渉できないが、スクショを検知することはできる。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?