Как поймать сенсорное событие при каждом просмотре приложения? - PullRequest
3 голосов
/ 09 февраля 2011

Я хочу поймать событие касания во всех моих представлениях. Так что оно должно иметь дело с appdelegate.

Я сослался

iPhone: обнаружение неактивности пользователя / времени простоя с момента последнегосенсорный экран

но не удалось

Надеюсь, я пойду в правильном направлении

Спасибо

Ответы [ 4 ]

0 голосов
/ 04 августа 2017

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

0 голосов
/ 10 февраля 2011

Делегат приложения не является респондентом.Я бы создал подкласс UIWindow и переопределил его методы обработки событий, потому что окно получает все сенсорные события в первый раз.

0 голосов
/ 23 февраля 2012

Вопреки тому, что futureelilte7 говорит, ваш делегат приложения (созданный при создании проекта) фактически является подклассом UIResponder и отвечает на селектор touchesBegan:withEvent: и другие подобные селекторы.

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

    // your code here
}

Это должно сохранить поведение прикосновения по умолчанию и дать вам возможность выполнять свои собственные пользовательские функции.

0 голосов
/ 09 февраля 2011

просто реализовать

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

UITouch *touch = [[event allTouches] anyObject];

CGPoint touchLocation = [touch locationInView:self.view];

//your logic

}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event

{ 

//your logic

}  


- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

{

//your logic

}

в вашем коде .. Я думаю, что остальное вы можете понять.

...