跟踪指定 UIViewController 子类的所有触摸

Posted

技术标签:

【中文标题】跟踪指定 UIViewController 子类的所有触摸【英文标题】:Tracking all touches in for a designated UIViewController subclass 【发布时间】:2013-01-06 22:42:37 【问题描述】:

我想跟踪指定 UIViewController 子类中的所有用户触摸,例如我的视图控制器。

由于这个 UIViewController 可能包含 UIKit-Elements,例如 UIButtons 等。我想在 MyViewController 的视图中将一个清晰的触摸跟踪 UIView 放在其他视图之上。

现在我将触摸事件发送到 UIView,但我不知道如何将触摸委托给其他子视图。

我已经尝试遍历 MyViewController 的所有视图子视图(触摸跟踪 UIView 除外)并向它们发送 touchesBegan:withEvent:、touchesMoved:withEvent: 等。

但这不适用于 UICollectionViews。

我基本上需要的是跟踪 MyViewController 的视图框架中的所有触摸事件。 MyViewController 本身可以继承需要响应触摸事件的各种其他视图。

我还在这里 (http://***.com/questions/8423174/detecting-all-touches-in-an-app) 找到了继承 UIWindow 并覆盖 sendEvent 的想法: 在我的情况下这是可能的,但是我必须启用/禁用触摸跟踪 MyViewController 是否可见。 另外我还不知道如何区分 touchesBegan:withEvent、touchesMoved:withEvent: 等。

提前致谢。

干杯, 浴缸

在 MyViewController.m 中

- (void)loadView

    [super loadView];

    VETouchTrackingView *touchTrackingView;
    touchTrackingView = [[VETouchTrackingView alloc] initWithFrame:self.view.frame];
    touchTrackingView.userInteractionEnabled = YES;

    self.touchTrackingView = touchTrackingView;
    [self.view addSubview:self.touchTrackingView];
    [self.view bringSubviewToFront:self.touchTrackingView];

【问题讨论】:

【参考方案1】:

我设法通过覆盖我的 UIWindow 子类中的 sendEvent: 来获得所需的触摸跟踪。

这很好用。

这里是任何人都需要的 github 项目:https://github.com/bhr/BHTouchTracking

【讨论】:

以上是关于跟踪指定 UIViewController 子类的所有触摸的主要内容,如果未能解决你的问题,请参考以下文章

UIViewController 的 Swift 子类化子类

为啥 UIViewController 是 UIResponder 的子类?

将 UITableViewController 子类重构为 UIViewController 子类

如何继承 UIViewController 的子类

UIViewController 子类调用方法

为啥 UIPopoverController 不是 UIViewController 的子类?