0

我有一个 tableview A,其行条目自定义 segue 到 GridView B(实际上使用开源 MMGridView)。gridView/scrollView 的子视图单元格使用 touchesBegan/TouchesEnd 来检测它们的选择。

我正在使用情节提要,自定义转场由 tableView 中的 didselectrowatindexpath/performsegue 动画和启动。

问题在于,一旦选择了 tableview 行,额外的点击就会排队并传递到各个 gridCells。

在自定义 segue 中,我尝试设置 destinationviewcontroller.view.userInteractionEnabled = NO; 然后在destinationViewController 的viewDidAppear 中重新启用它。这不起作用,排队的触摸事件仍然传递到 gridView 的子单元格。

如何刷新或取消在自定义动画转换期间似乎已排队的任何触摸事件?

编辑:删除自定义 segue 似乎停止了“排队”触摸事件行为。或者,也许现在转场发生得足够快,以至于在此期间没有发生触摸事件?为了完整起见,这是我的自定义 uistoryboardsegue,它给我带来了问题:

#import "QuartzCore/QuartzCore.h"

@implementation TTOCustomSegue

-(void)perform {

UIViewController *sourceViewController = (UIViewController*)[self sourceViewController];
UIViewController *destinationController = (UIViewController*)[self destinationViewController];
//destinationController.view.userInteractionEnabled = NO;

CATransition* transition = [CATransition animation];
transition.duration = .4;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
transition.type = kCATransitionFade; 
transition.subtype = nil;

[sourceViewController.navigationController.view.layer addAnimation:transition forKey:kCATransition];    
[sourceViewController.navigationController pushViewController:destinationController animated:NO];       
}
@end
4

1 回答 1

0

不应该有任何排队的事件。确保您没有以某种方式阻塞主线程。

要在动画期间完全阻止事件处理,有一些有用的方法UIApplication

[[UIApplication sharedApplication] beginIgnoringInteractionEvents];

[[UIApplication sharedApplication] endIgnoringInteractionEvents];

如果您需要延迟启动动画并且您不希望在延迟阶段执行任何用户操作,这些方法非常有用。

于 2013-07-01T19:25:26.590 回答