iOS 6 UIGestures(Swipe)停止使用QLPreviewController

时间:2012-09-21 12:43:36

标签: ios uigesturerecognizer ios6 qlpreviewcontroller

在iOS 6 beta 4和iOS 5.1.1中,我有左/右滑动,允许用户在UIViewController中托管的不同QLPreviewControllers之间滑动。

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

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

任何人都看过这个或知道一个解决方法。

谢谢,

3 个答案:

答案 0 :(得分: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,因为降低它会导致手势再次被忽略。

答案 1 :(得分:2)

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

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

}

答案 2 :(得分:1)

你尝试过的解决方案很接近,但可能已经完成了你应该做的事情。不要将另一个视图添加为预览控制器的子视图,而是将预览控制器添加为UIView的子视图。

在标准UIView中查看预览控制器。然后,将您的手势重新分配给UIView的gestureRecognizers集合,将它们从QLPreviewController的集合中删除。

不确定为什么会改变,但我的应用程序遇到了同样的问题,除了我,UITableView不再滚动了。