如何在应用程序的每个视图中捕获触摸事件?

时间:2011-02-09 13:13:48

标签: iphone events touch

我想在所有视图中捕捉触摸事件。所以它应该处理appdelegate

我提到了

iPhone: Detecting user inactivity/idle time since last screen touch

但没有成功

希望我能朝着正确的方向前进

由于

4 个答案:

答案 0 :(得分:0)

App委托人不是响应者。我会继承UIWindow,并覆盖它的事件处理方法,因为window会在第一时间获取所有触摸事件。

答案 1 :(得分:0)

无需在此处继承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)
    }
}

在你的app appate中完成了启动方法,只需调用addGesture就可以了。所有的触摸都将通过CatchAllGesture的方法,而不会阻止其他人的功能。

https://stackoverflow.com/a/45496010/199966

答案 2 :(得分:-1)

只需实施

- (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

}

在你的代码中......我想你可以想出其余的想法。

答案 3 :(得分:-1)

与futureelilte7所说的相反,您的应用程序委托(在创建项目时生成)实际上是UIResponder的子类,并响应选择器touchesBegan:withEvent:和其他类似的选择器。

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

    // your code here
}

这应该保留默认的触摸行为,并让您有机会自己执行自定义功能。