Опитвам се да създам функция за изчакване за приложение, което разработвам с помощта на 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];
}
}
Кодът по-горе работи за всяко докосване, но еквивалентът на swift работи само когато изглед не съществува над тази йерархия на UIWindow?
Някой знае ли начин за засичане на всяко докосване в приложението?
UIWindow
и то също спира да работи. Вероятно заради новия разделен изглед на приложения на iOS 9 и т.н. Така че те го преработиха, за да поддържа тези нови функции - две отворени приложения, клавиатура, ... Не съм 100% сигурен, просто си мисля на глас ... - person zrzka   schedule 28.07.2015