【问题标题】:iOS 6 UIGestures (Swipe) stops working with QLPreviewControlleriOS 6 UIGestures (Swipe) 停止使用 QLPreviewController
【发布时间】:2012-09-21 12:43:35
【问题描述】:

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

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

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

任何人看到这个或知道解决方法。

谢谢,

【问题讨论】:

  • 我在参与的项目中遇到了类似的问题。

标签: ios uigesturerecognizer ios6 qlpreviewcontroller


【解决方案1】:

我遇到了同样的问题,但 UITapGestureRecognizer 无法在 QLPreviewController 上运行。在 iOS 6 中,这对于 UIGestureRecognizer 对象来说就像是一个黑洞……没有任何东西可以让它出来!

但是我确实找到了解决方法。我是 QLPreviewController 的子类,所以在我的子类中我滥用了(相对)新的 viewWillLayoutSubviews 方法并添加了以下 sn-p:

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,因为降低它会导致手势再次被忽略。

【讨论】:

  • 太棒了,谢谢。虽然这确实有效,但我会注意到您失去了所有标准 QLPreviewController 行为、缩放、滚动等
  • 这不是很危险吗?将相同的 UIView 实例作为子视图添加到多个视图?视图的实例只能在视图层次结构中出现一次。
  • 一开始就是个hack。就像 Ben 说的,它阻止了内置的 QLPreviewController 手势。我实际上最终放弃了并选择了 UIDocumentInteractionController。也不能在那个上添加自定义手势,但它更符合我的团队正在寻找的东西。仍然不开心,但我不得不继续前进。 =-/ 至于你的问题,我对重用视图没有任何问题。但是您可以轻松地让 for 循环为每个叠加层创建一个新视图。
【解决方案2】:

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

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

}

【讨论】:

    【解决方案3】:

    您尝试的解决方案很接近,但可能与您应该做的相反。与其将另一个视图添加为预览控制器的子视图,不如将预览控制器添加为 UIView 的子视图。

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

    不知道为什么会发生这种变化,但我的应用也遇到了同样的问题,除了我,它是 UITableView 不再滚动了。

    【讨论】:

    • 嗨大卫,感谢您的建议,我尝试了这种方法,它在 iOS 5 中有效,但在 iOS 6 中,一旦加载文档,QLPreviewController 仍会阻止所有手势。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多