Я пытаюсь создать функцию тайм-аута для приложения, которое я разрабатываю с помощью Swift 2, но в Swift 2 вы можете поместить этот код в делегат приложения, и он работает, но он не обнаруживает нажатия клавиш, нажатия кнопок, нажатия текстовых полей , и так далее:
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
super.touchesBegan(touches, withEvent: event);
let allTouches = event!.allTouches();
if(allTouches?.count > 0) {
let phase = (allTouches!.first as UITouch!).phase;
if(phase == UITouchPhase.Began || phase == UITouchPhase.Ended) {
//Stuff
timeoutModel.actionPerformed();
}
}
}
До Swift 2 я мог иметь подкласс AppDelegate UIApplication и переопределять sendEvent: вот так:
-(void)sendEvent:(UIEvent *)event
{
[super sendEvent:event];
// Only want to reset the timer on a Began touch or an Ended touch, to reduce the number of timer resets.
NSSet *allTouches = [event allTouches];
if ([allTouches count] > 0) {
// allTouches count only ever seems to be 1, so anyObject works here.
UITouchPhase phase = ((UITouch *)[allTouches anyObject]).phase;
if (phase == UITouchPhaseBegan || phase == UITouchPhaseEnded)
[[InactivityModel instance] actionPerformed];
}
}
Приведенный выше код работает для каждого прикосновения, но быстрый эквивалент работает только тогда, когда представление не существует выше этой иерархии UIWindow?
Кто-нибудь знает способ обнаруживать каждое касание в приложении?
UIWindow
, и оно тоже перестает работать. Вероятно, из-за нового разделенного представления приложений iOS 9 и т. Д. Поэтому они переделали его для поддержки этих новых функций - два открытых приложения, клавиатура, ... Не уверен на 100%, просто подумал вслух ... - person zrzka   schedule 28.07.2015