我刚刚在tableview上放了一个轻扫手势。但是tableview正在检测20次手势1?为什么会这样发生?
最初我使用下面的代码在另一个控制器上添加了控制器:
obj = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil];
CGRect rectFrame = obj.view.frame;
rectFrame.origin.x += 320.0f;
[obj.view setFrame:rectFrame];
[self.view addSubview:obj.view];
RootViewController包含一个表格,当我们向左或向右滑动时需要滑动整个视图。
答案 0 :(得分:3)
有几点想法:
基本流程:鉴于您将桌面视图添加到右侧,我假设您需要向左滑动才能将其滑动到位。该手势应该在主视图上,而不是表视图。然后假设你想要向右滑动以向后滑动到右边,那么该手势就会出现在你的obj
子控制器上。
处理UIScrollView子类时的标准手势警告:注意,在实际上,在桌面视图上滑动手势并非100%可靠,因为当我们开始左手或右手手势时,一个人的手指很容易向上或向下滑动,然后作为平移视图而不是滑动手势。但这是一个小小的UI问题。 (顺便说一句,这就是为什么应用程序越来越多地将滑动/平移手势添加到屏幕顶部的导航栏,而不是桌面视图本身。)
优化:如果您使用标准滑动手势,只需将direction
设置为UISwipeGestureRecognizerDirectionLeft
或...Right
,那么手势识别器系统可以很好地检测你的手势,处理真实世界的变化等等。如果你有任何代码可以自己验证手势(或者弄乱touches
事件),那么你可以看到你的行为描述你的逻辑是否过于严格(例如在y
中寻找零变化)。
最重要的是,如果您仍然遇到问题,请分享您的手势创建代码(如果手势应用条件逻辑,手势代码本身也是如此)。
与您手头的问题无关,建议您始终让iOS了解您的视图控制器。如果您看到WWDC 2011 - Implementing View Controller Containment,他们会警告您视图层次结构与控制器层次结构不同步的危险。
简而言之,仅仅将控制器的视图添加为子视图是不够的。幸运的是,修复很简单:您可以实现视图控制器包含。因此,对于add child controller,您需要做的就是在添加子视图之前,请调用:
[self addChildViewController:obj];
在添加子视图并完成其框架配置后,告诉iOS您已经这样做了:
[obj didMoveToParentViewController:self];
如果您不进行这两项调用,可能会有iOS事件无法传递给您的视图控制器。