8

iOS 6 ベータ 4 および iOS 5.1.1 では、UIViewController でホストされているさまざまな QLPreviewController 間でユーザーがスワイプできるように、左/右のスワイプがありました。

iOS 6 のリリース バージョンでは、スワイプは完全に無視されます。

プレビュー コントローラがスワイプを飲み込む前に、プレビュー コントローラをホストするビューを取得してスワイプをインターセプトしようとして、プレビュー コントローラのサブビューとして UIView を配置しようとしましたが、これらは決してトリガーされません。

これを見た人、または回避策を知っている人。

ありがとう、

4

3 に答える 3

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 を使用しました。これを低くすると、ジェスチャが再び無視されるためです。

于 2012-09-28T01:12:16.920 に答える
2

また、同じコードを使用すると、UIGestureRecognizers が iOS 6 で動作しなくなったこともわかりました。しかし、完全に壊れているわけではありません。Apple 開発サンプル プロジェクト「SimpleGestureRecognizers」は引き続き機能します。コードを比較した後、明示的に「addGestureRecognizer」が問題を解決したことがわかりました (IB で行っていた他のすべての手順に加えて)。あなたの IBOutlets 名の 1 つが leftSwiftRecognizer であると仮定すると、次のことができます。

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

}
于 2012-11-01T07:52:39.217 に答える
1

あなたの試みた解決策は近いものでしたが、おそらくあなたがすべきことから逆行しました。プレビューコントローラのサブビューとして別のビューを追加する代わりに、UIViewのサブビューとしてプレビューコントローラを追加します。

標準のUIView内のプレビューコントローラーをサブビューします。次に、ジェスチャをUIViewのgestureRecognizersコレクションに再割り当てし、QLPreviewControllerのコレクションから削除します。

これが変更された理由はわかりませんが、アプリで同じ問題が発生しました。ただし、スクロールしなくなったのはUITableViewでした。

于 2012-09-21T17:39:26.053 に答える