Уведомление или обнаружение скриншота перед тем, как сделать снимок? - PullRequest
22 голосов
/ 23 января 2010

Есть ли уведомление или другой механизм информирования о том, что пользователь делает снимок экрана с помощью кнопок домой / питания?

Я видел темы о желании отключить создание скриншотов, но это не то, что я хочу сделать.

У меня есть клиент-фотограф, который обеспокоен тем, что его работы будут скопированы с помощью пользователей, делающих снимки экрана, и я подумал, что если бы была возможность нанести водяной знак на изображение до того, как был сделан снимок экрана, это бы развеяло его страхи.

Ответы [ 5 ]

6 голосов
/ 27 января 2010

Вот способ, который может сработать, хотя я уверен, что он будет полностью противоречить рекомендациям по пользовательскому интерфейсу. Если вы заставляете пользователя держать палец на экране для показа изображения, то я не думаю, что он может создавать скриншоты. Потому что, как только вы нажимаете клавиши home + lock, чтобы фактически сделать скриншот, экран, кажется, ведет себя так, как будто к нему не прикасаются пальцы. Попробуйте сделать скриншот при перемещении между домашними экранами, чтобы понять, что я имею в виду.

Не идеальное решение, но вы можете использовать его в дизайне своего приложения, если вы действительно умны, и это не отвлекает слишком много от опыта пользователя (хотя это сложная задача!). Тем не менее, я считаю, что это может позволить вам отображать иллюстрации / фотографии, не позволяя пользователям делать скриншоты.

5 голосов
/ 23 января 2010

Уведомление PictureWasTakenNotification Дарвина будет отправлено, когда пользователь сделает снимок экрана. Однако, это отправляется после снимок экрана сделан.

(Уведомления не будут отправлены до снимок экрана был сделан.)

4 голосов
/ 03 ноября 2014

Начиная с iOS 7, UIApplicationUserDidTakeScreenshotNotification существует. Делая что-то подобное, вы должны обнаружить скриншоты:

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(userDidTakeScreenshot) name:UIApplicationUserDidTakeScreenshotNotification object:nil];
}

- (void)userDidTakeScreenshot {
    // Screenshot taken, act accordingly.
}

Наконец, не забудьте удалить наблюдателя:

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationUserDidTakeScreenshotNotification object:nil];
}
0 голосов
/ 22 июня 2018

ИСПОЛЬЗУЯ ЭТОТ ОТВЕТ, ВЫ ПОЛУЧАЕТЕ УВЕДОМЛЕНИЕ ПОСЛЕ ЗАПУСКА.

iOS 11 и Swift 4

Три простых шага: -

1. Добавьте следующее ? наблюдателя в свой ViewController или любое другое место, которое вы хотите

NotificationCenter.default.addObserver(self, selector: #selector(screenShotTaken(notification:)), name: NSNotification.Name.UIApplicationUserDidTakeScreenshot, object: nil)

2. Пример метода (ниже)будет активирован, когда будет сделан снимок экрана

@objc func screenShotTaken(notification: Notification) {
        print(notification)
        print("Screenshot has taken, do something you want ")
     }

3. Удалить наблюдателя (Хороший способ удалить наблюдателя в deinit)

deinit {
        NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIApplicationUserDidTakeScreenshot, object: nil)
    }
0 голосов
/ 13 ноября 2014

Что действительно нужно, так это уведомление, которое отправляется до того, как происходит фактический снимок экрана. Метод делегирования или какое-либо другое средство, позволяющее приложению создавать скриншоты в полете для перерисовки вашего контента до того, как произойдет захват.

А его нет.

...