Можно ли обнаружить снимок экрана в фоновом режиме для iOS? [Дубликат]

Очистить и перестроить

. «Чистая» сборки может удалить «мертвую древесину», которая может быть оставлена ​​лежащей рядом с предыдущими сборками, неудачными сборками, неполными сборками и другими проблемами сборки.

В общем случае среда IDE или сборка будет включать в себя некоторую форму «чистой» функции, но это может быть неправильно настроено (например, в ручном файле) или может завершиться неудачей (например, промежуточные или результирующие двоичные файлы - только).

После завершения «очистки» убедитесь, что «чистый» преуспел, и весь сгенерированный промежуточный файл (например, автоматический файл makefile) был успешно удален.

Этот процесс можно рассматривать как конечный вариант, но часто является хорошим первым шагом ; особенно если недавно был добавлен код, связанный с ошибкой (локально или из исходного репозитория).

115
задан Mick MacCallum 4 February 2014 в 01:55
поделиться

5 ответов

Я нашел ответ! Выполнение снимка экрана прерывает любые нажатия на экране. Вот почему snapchat требует удерживания, чтобы увидеть картинку. Ссылка: http://tumblr.jeremyjohnstone.com/post/38503925370/how-to-detect-screenshots-on-ios-like-snapchat

22
ответ дан portforwardpodcast 31 August 2018 в 12:46
поделиться

Похоже, нет прямого способа сделать это, чтобы обнаружить, что пользователь нажал home + power button. Согласно этому , это было возможно раньше, используя уведомление darwin, но оно больше не работает. Поскольку snapchat уже делает это, я предполагаю, что они проверяют фотоальбом iPhone, чтобы определить, добавлено ли новое изображение между этими 10 секундами, и каким-то образом они сравниваются с текущим изображением. Возможно, для этого сравнения сделана некоторая обработка изображений. Просто мысль, возможно, вы можете попытаться расширить ее, чтобы она работала. Проверьте это для более подробной информации .

Редактирование:

Похоже, что они могут обнаруживать событие отмены UITouch (захват экрана отменяет касания) и показывает это сообщение об ошибке для пользователя в соответствии с этим блогом: Как обнаружить скриншоты на iOS (например, SnapChat)

В этом случае вы можете использовать метод – touchesCancelled:withEvent: для определения отмены UITouch для обнаружения этого , Вы можете удалить изображение в этом методе делегата и показать соответствующее предупреждение пользователю.

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
    [super touchesCancelled:touches withEvent:event];

    NSLog(@"Touches cancelled");

    [self.imageView removeFromSuperView]; //and show an alert to the user
}
1
ответ дан Community 31 August 2018 в 12:46
поделиться

Вот как это сделать в Swift с закрытием:

func detectScreenShot(action: () -> ()) {
    let mainQueue = NSOperationQueue.mainQueue()
    NSNotificationCenter.defaultCenter().addObserverForName(UIApplicationUserDidTakeScreenshotNotification, object: nil, queue: mainQueue) { notification in
        // executes after screenshot
        action()
    }
}

detectScreenShot { () -> () in
    print("User took a screen shot")
}

Это включено как стандартная функция в:

https://github.com/goktugyil / EZSwiftExtensions

Отказ от ответственности: его мое репо

7
ответ дан Esqarrouth 31 August 2018 в 12:46
поделиться

Последний SWIFT 3:

func detectScreenShot(action: @escaping () -> ()) {
        let mainQueue = OperationQueue.main
        NotificationCenter.default.addObserver(forName: .UIApplicationUserDidTakeScreenshot, object: nil, queue: mainQueue) { notification in
            // executes after screenshot
            action()
        }
    }

В viewDidLoad вызовите эту функцию

detectScreenShot { () -> () in
 print("User took a screen shot")
}

Однако

NotificationCenter.default.addObserver(self, selector: #selector(test), name: .UIApplicationUserDidTakeScreenshot, object: nil)

    func test() {
    //do stuff here
    }

работает полностью нормально. Я не вижу никаких точек mainQueue ...

4
ответ дан Maksim Kniazev 31 August 2018 в 12:46
поделиться

Начиная с iOS 7, другие ответы больше не верны. Apple сделала так, что touchesCancelled:withEvent: больше не вызывается, когда пользователь делает снимок экрана.

Это полностью сломает Snapchat, поэтому была добавлена ​​пара бета-версий в новом решении. Теперь решение так же просто, как использование NSNotificationCenter для добавления наблюдателя в UIApplicationUserDidTakeScreenshotNotification .

Вот пример:

Цель C

NSOperationQueue *mainQueue = [NSOperationQueue mainQueue];
[[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationUserDidTakeScreenshotNotification
                                                  object:nil
                                                   queue:mainQueue
                                              usingBlock:^(NSNotification *note) {
                                                 // executes after screenshot
                                              }];

Swift

NotificationCenter.default.addObserver(
    forName: .UIApplicationUserDidTakeScreenshot,
    object: nil,
    queue: .main) { notification in
        //executes after screenshot
}
324
ответ дан Mick MacCallum 31 August 2018 в 12:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: