ios - 检测并记录所有手势

标签 ios logging uigesturerecognizer

是否有一种方法可以检测并记录项目和/或所有潜在触摸响应者收到的所有手势消息?

我正在编写一个新的 iOS 8 主/细节通用项目,该项目正在经历默认的滑动返回行为和基于手指的绘图之间的冲突。然而,当我尝试通过例如 gestureRecognizerShouldBegin 在详细 Controller 上记录手势行为时,该代码永远不会被调用。

最佳答案

我解决了这个问题,方法是遍历我的 viewControllers.views 列表以识别 subview ,然后记录与每个 View 关联的每个手势识别器 - 或者我感兴趣的任何其他内容。 要迭代 View ,如果我对 View 进行子类化,我会使用建议的递归方法 here .因为我没有,我稍微修改了代码here .

然后,我编写了实用函数以备将来使用:

+ (NSMutableArray *)getAllSubviews:(UINavigationController *)navigationController {

    NSMutableArray *allSubviews     = [[NSMutableArray alloc] initWithObjects: nil];
    NSMutableArray *currentSubviews = [[NSMutableArray alloc] initWithObjects: nil];
    NSMutableArray *foundSubviews     = [[NSMutableArray alloc] initWithObjects: nil];

    NSLog(@"\n%lu total controllers:\n%@",navigationController.viewControllers.count, navigationController.viewControllers);

    for (UIViewController *vc in navigationController.viewControllers) {
        [currentSubviews addObject: vc.view];
        [foundSubviews addObject: vc.view];

        while (foundSubviews.count) {

            [foundSubviews removeAllObjects];

            for (UIView *view in currentSubviews) {

                for (UIView *subview in view.subviews)
                    [foundSubviews addObject:subview];
            }

            [currentSubviews removeAllObjects];
            [currentSubviews addObjectsFromArray:foundSubviews];
            [allSubviews addObjectsFromArray:foundSubviews];

        }
    }
    NSLog(@"\n%lu total subviews:\n%@",allSubviews.count, allSubviews);

    return allSubviews;
}
+ (void)logAllGestureRecognizers:(UINavigationController *)navigationController {

    NSMutableArray *allViews = [self getAllSubviews: navigationController];

    for (UIView *v in allViews) {
        for (UIGestureRecognizer *gestureRecognizer in v.gestureRecognizers) {
            NSLog(@"Gesture Recognizer  %@", gestureRecognizer);
        }
    }
}

调用函数 [YourUtilityObject logAllGestureRecognizers:self.navigationController];

一个警告:这个实现假设 self.navigationController 知道你所有的事件 View Controller 。如果您正在为当前的 viewController 创建一个新的 navigationController,那么结果将只显示与该 navigationController 关联的 View ,您将必须为每个导航 Controller 手动调用该函数。

关于ios - 检测并记录所有手势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27783126/

相关文章:

ios - 设置 UILongPressGesture 的最大持续时间?

apache - 带有客户端证书主题名称的 Tomcat 7 访问日志

google-app-engine - 如何使用maven插件下载GAE日志?

iphone - 如何使 UITableView 上的 SwipeGestureRecognizer 响应更快?

ios - -[id<UIGestureRecognizerDelegate> gestureRecognizer :shouldRecognizeSimultaneouslyWithGestureRecognizer] both recognizers are nil in debugger

ios - 核心图设置第一个 majortick 的 x 轴位置

ios - UICollectionView 理解可见单元格日志

ios - 将 mysql 查询转移到 NSPredicate

ios - 处理 UICollectionView 单元格上的滑动 : implement handler on UICollectionView or on each cell?

.net - 如何在企业库4.0中创建自定义日志过滤器?