【Swift4】iOS에서 유저가 스크린샷을 찍으면 뭔가 한다【소 재료】

이런 것이 있다는 것을 최근에 알았으므로, 작은 재료로 남깁니다.
  • 2016/10/19 추가: Swift3에서 코드를 추가했습니다.
  • 2017/10/01 덧붙여 : Swift4의 기술을 추가했습니다.

  • 사용자가 스크린샷을 찍었음을 감지



    Swift3, Swift4



    Swift3, Swift4 에서는, NSNotificationName 구조체에 static인 프로퍼티로서 이하가 정의되고 있습니다.
    static let UIApplicationUserDidTakeScreenshot: NSNotification.Name
    

    여기를 notificationName으로 NotificationCenter의 observer를 넣어,
    「홈 버튼+전원 버튼의 동시 누름」에 의한 스크린 샷을 찍은 것을 검지할 수 있습니다.
    import UIKit
    
    class MyViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            // Observerとして登録
            NotificationCenter.default.addObserver(self, selector: #selector(MyViewController.userDidTakeScreenshot(_:)), name: .UIApplicationUserDidTakeScreenshot, object: nil)
        }
    
        deinit {
            NotificationCenter.default.removeObserver(self)
        }
    
        // UIApplicationUserDidTakeScreenshot の通知を受けて実行される
        func userDidTakeScreenshot(notification: Notification) {
            // 何かする
        }
    
    }
    

    레퍼런스에도 쓰고 있습니다만, 통지를 받았을 때의 Notification의 userInfo에는 특별히 아무것도 설정되어 있지 않기 때문에, 상기의 예로 userDidTakeScreenshot 메소드내에서 notification.userInfo 로서도 nil이 돌려주어 옵니다.

    Swift2


    let UIApplicationUserDidTakeScreenshotNotification: String
    

    Swift2에서는 위와 같은 String 형의 정수가 정의되고 있습니다.


    import UIKit
    
    class MyViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            // Observerとして登録
            NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(MyViewController.userDidTakeScreenshot(_:)), name: UIApplicationUserDidTakeScreenshotNotification, object: nil)
        }
    
        deinit {
            NSNotificationCenter.defaultCenter().removeObserver(self)
        }
    
        // UIApplicationUserDidTakeScreenshotNotification の通知を受けて実行される
        func userDidTakeScreenshot(notification: NSNotification) {
            // 何かする
        }
    
    }
    

    응용



    이 알림을 이용하여
    스크린 샷을 찍은 후에 경고를 내거나 사용자가 찍은 스크린 샷을 가져 와서 가공 한 것을 새롭게 보존시키는 등이 가능합니다.

    참고:
    h tp // w w. 및 y.p. 오 rg / 아 r ゔ ぇ s / 1633

    또한 앱의 내용에 따라 사용자가 얼마나 스크린샷을 찍고 있는지 로그를 찍는 것도 좋을지도 모릅니다.

    주의점


  • 알림을 받는 것은 어디까지나 스크린샷을 찍은 "후"
  • 알림에 userInfo가 부여되지 않았기 때문에 "스크린 샷을 찍었다"는 것 외에는 정보가 없습니다
  • 알림을받은 직후 스크린 샷 이미지가 아직 카메라 롤에 저장되지 않았습니다.
  • → 저장된 이미지를 얻으려면 처리를 지연시키는 등의 궁리가 필요하다

  • iOS 7.0 이상에서 사용 가능



  • 이상, 사용 장소는 한정됩니다만, 원래 스쿠쇼의 검출은 할 수 없다고 생각하고 있었으므로 참고 정도에 썼습니다.

    모르는 것이 아직도 많이 있고 재미 있습니다

    좋은 웹페이지 즐겨찾기