简而言之,从我读过的内容和我的实验结果来看,当状态转换(由用户的触摸或滑动启动)时,“gobbler”似乎会吞噬并触摸表格视图(实际上是表格单元格)正在进行中,以便在用户再次触摸表格之前完成状态转换。Apple 可能会在其他情况下使用它,但它是在我观察到 gobblers 的表格视图中。
现在长话短说:假设您的表格视图在表格单元格上实现了一个“抽屉”,例如 Apple 的邮件应用程序或消息应用程序。当您向后滑动打开抽屉并对抽屉中的任何按钮进行操作时,一切都很好。但是,如果您只是通过第四次滑动来关闭平局,您可能会发现您在随机单元格上的下一次向后滑动不起作用。但是,如果您继续向后滑动,下一次滑动通常会再次显示抽屉。简单地说,如果你只是通过滑动打开和关闭随机单元格上的抽屉,你会发现有时抽屉打不开。
我在我的桌子上看到这种行为,并认为我做错了什么。我尝试了很多东西,最终实现了我自己的 UITableView 子类,它也支持 UIGestureRecognizerDelegate。在我的子类中,我实现了委托的 shouldBeRequiredToFailByGestureRecognizer 函数,只是为了打印出 gestureRecognizer 和 otherGestureRecognizer 对。然后我发现,当识别到向后滑动时,成对中不存在 gobbler。但是,当背面滑动不起作用时,gobbler 肯定是存在的。
网络上的普遍看法是,使用 gobbler 来防止用户在一个转换已经在进行时在桌子上引起另一个状态转换。如果用户确实采取了一些行动(通过触摸抽屉中的按钮),那很好。但是当用户刚刚关闭抽屉时,gobbler 应该被取消。或者仅当用户采取行动时才应添加 gbbler。在我意识到之后,我继续尝试我对 Apple 应用程序的理论。我已经知道邮件应用程序可以完美响应每次滑动。但是消息应用程序会间歇性地重复抽屉打开滑动,就像我的应用程序一样。所以我猜 Mail 的开发者会更加小心,并使用内部知识来做对。我的观察是在 iPhone 6 和 iPad 2 上的 iOS 8.4 上完成的。