Нет необходимости создавать подкласс UIWindow, здесь приведен пример кода простого проходного жеста, охватывающий все касания для всех представлений:
Существует способ сделать это приложение широким без необходимости выполнения каких-либо действий отдельными контроллерами.Просто добавьте распознаватель жестов, который не отменяет прикосновения.Таким образом, все касания будут отслеживаться по таймеру, а другие касания и жесты не будут затронуты вообще, так что никто не должен знать об этом.
fileprivate var timer ... //timer logic here
@objc public class CatchAllGesture : UIGestureRecognizer {
override public func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent) {
super.touchesBegan(touches, with: event)
}
override public func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent) {
//reset your timer here
state = .failed
super.touchesEnded(touches, with: event)
}
override public func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent) {
super.touchesMoved(touches, with: event)
}
}
@objc extension YOURAPPAppDelegate {
func addGesture () {
let aGesture = CatchAllGesture(target: nil, action: nil)
aGesture.cancelsTouchesInView = false
self.window.addGestureRecognizer(aGesture)
}
}
В делегате вашего приложения завершил метод запускаПросто позвоните addGesture и все готово.Все касания будут проходить через методы CatchAllGesture, не нарушая функциональность других.
https://stackoverflow.com/a/45496010/199966