Приложение Snapchat в App Store - это приложение, которое позволяет вам делиться фотографиями с самоуничтожением. Вы можете просматривать фотографии только в течение X секунд. Если вы попытаетесь сделать снимок экрана во время показа изображения с помощью сочетания клавиш включения питания, он сообщит отправителю, что вы попытались сделать снимок экрана.
Какая часть SDK позволяет определить, что пользователь делает снимок экрана? Я не знал, что это возможно.
ios
screenshot
те2
источник
источник
Ответы:
Я нашел ответ! Снимок экрана прерывает любые прикосновения, которые находятся на экране. Вот почему Snapchat требует удержания, чтобы увидеть картинку. Ссылка: http://tumblr.jeremyjohnstone.com/post/38503925370/how-to-detect-screenshots-on-ios-like-snapchat
источник
Начиная с iOS 7 другие ответы больше не верны. Apple сделала это так
touchesCancelled:withEvent:
, больше не называется, когда пользователь делает снимок экрана.Это полностью разрушило бы Snapchat, поэтому была добавлена пара бета-версий в новом решении. Теперь решение так же просто, как использование NSNotificationCenter для добавления наблюдателя в UIApplicationUserDidTakeScreenshotNotification .
Вот пример:
Цель С
стриж
источник
touchesCancelled:withEvent:
должно позволить вам обнаружить скриншот на всех (последних) версиях iOS.Вот как это сделать в Swift с замыканиями:
Swift 4.2
Это включено как стандартная функция в:
https://github.com/goktugyil/EZSwiftExtensions
Отказ от ответственности: это мой репо
источник
Последний SWIFT 3 :
В viewDidLoad , вызовите эту функцию
Тем не мение,
работает совершенно нормально. Я не вижу никаких точек mainQueue ...
источник
Похоже, что нет прямого способа сделать это, чтобы обнаружить, нажал ли пользовательhome + power button
. Согласно этому , это было возможно раньше с помощью уведомления Дарвина, но это больше не работает. Так как Snapchat уже делает это, я предполагаю, что они проверяют фотоальбом iPhone, чтобы определить, было ли добавлено новое изображение в течение этих 10 секунд, и в какой-то мере они сравниваются с текущим отображаемым изображением. Может быть некоторая обработка изображения сделана для этого сравнения. Просто мысль, возможно, вы можете попытаться расширить это, чтобы оно заработало. Проверьте это для более подробной информации .Редактировать:
Похоже, что они могут обнаружить событие отмены UITouch (Снимок экрана отменяет касания) и показать это сообщение об ошибке пользователю согласно этому блогу: Как обнаружить скриншоты на iOS (например, Snapchat)
В этом случае вы можете использовать
– touchesCancelled:withEvent:
метод для определения отмены UITouch, чтобы обнаружить это. Вы можете удалить изображение в этом методе делегата и показать соответствующее предупреждение пользователю.источник
Home + Lock
кнопки, ОС немедленно действует так, как будто пальцы не касаются экрана. Может быть, это происходит безtouchesEnded:withEvent
(или аналогичного обратного вызова), как это обычно бывает , поэтому, возможно, они могут отслеживать этот уникальный паттерн событий? Я могу быть совершенно не на том пути, но это моя единственная теория на данный момент.Свифт 4+
С помощью этого наблюдателя вы можете узнать, когда пользователь делает снимок экрана, но вы не можете предотвратить его.
источник
Swift 4 Примеры
Пример № 1 с использованием замыкания
Пример №2 с селектором
источник