2012-09-21 68 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]; 

}