Нет необходимости создавать подклассы 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
person
Jlam
schedule
03.08.2017