2012-09-21 104 views
8

在iOS 6 beta 4和iOS 5.1.1中,我有左/右滑动,允许用户在UIViewController中托管的不同QLPreviewController之间滑动。iOS 6 UIGestures(滑动)停止使用QLPreviewController

在iOS 6的发布版本中,滑动现在完全被忽略。

试图将UIView作为预览控制器的子视图,试图让托管预览控制器的视图在预览控制器有机会吞下它们之前拦截滑动,但这些从未触发。

任何人看到这个或知道工作。

感谢,

+4

我有一个类似的问题,我参与了一个项目。 –

回答

2

我有同样的问题,但与UITapGestureRecognizer不工作在QLPreviewController。在iOS 6中,这件事就像UIGestureRecognizer对象的黑洞一样......没有任何东西让它离开!

但是我找到了解决方法。我继承QLPreviewController,所以在我的子类,我滥用了(相对)新viewWillLayoutSubviews方法,并添加下面的代码片段:

UIView *overlay = [[UIView alloc] initWithFrame:self.view.frame]; 
overlay.backgroundColor = [UIColor whiteColor]; 
overlay.alpha = .002f; 
for (UIView *v in self.view.subviews) 
{ 
    [v addSubview:overlay]; 
} 
[overlay release]; 

这可能是矫枉过正,但我​​基本上进入了所有的快速查找子视图,并添加他们认为会接受这种姿态。我与.002 alpha一起去,因为降低它会导致手势再次被忽略。

+0

太棒了,谢谢你。 虽然这样做的工作,我会注意到你松了所有的标准QLPreviewController的行为,缩放,滚动等 –

+0

这不危险吗?将相同的UIView实例作为子视图添加到多个视图?视图实例只能在视图层次结构中出现一次。 – Echelon

+0

这是一个开始。像Ben说的那样,它会阻止内置的QLPreviewController手势。我最终放弃了,并与UIDocumentInteractionController一起。不能将自定义手势放在那一个上,但是这对我的团队正在寻找的东西来说是一个更好的匹配。仍然不开心,但我不得不继续前进。 = - /至于你的问题,我没有重复使用视图的问题。但是,您可以轻松地使for循环为每个叠加层创建一个新视图。 – ghostatron

1

你尝试的解决方案很接近,但可能向后从你应该做的事情。而不是将其他视图添加为预览控制器的子视图,请将预览控制器添加为UIView的子视图。

子视图标准UIView内的预览控制器。然后,将您的手势重新分配给UIView的gestureRecognizers集合,将它们从QLPreviewController集合中移除。

不知道为什么会发生这种变化,但我有我的应用程序相同的问题,除了我这是UITableView不滚动了。

+1

嗨大卫,感谢您的建议,我尝试了这种方法,它可以在iOS 5中工作,但在iOS 6中,QLPreviewController在文档加载后仍会阻止所有手势。 –

2

我也发现,使用相同的代码,UIGestureRecognizers已停止在iOS 6下工作,但它并没有完全破碎。 Apple Development示例项目“SimpleGestureRecognizers”仍然有效。比较代码后,我发现显式地“addGestureRecognizer”解决了这个问题(除了你在IB之下所做的其他所有步骤)。假设你的一个IBOutlets名字是LeftSwiftRecognizer,你可以这样做:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    .... 
    // swipe recognizer 
    [self.view addGestureRecognizer:self.leftSwiftRecognizer]; 

}