UIWebViewでドキュメントを表示しています。ドキュメント上にホットスポットを配置して、タップしたときにアクションをトリガーしたいのですが、ドキュメントをダブルタップしたときにドキュメントを自動ズームするデフォルトのUIWebViewの動作も維持したいと考えています。私は、ダブルタップにUIWebViewを応答させながら、シングルタップにどのように反応するかを理解することはできません。ダブルタップに応答するオブジェクトを背後に置いて、シングルタップジェスチャにのみ応答する方法はありますか?
まず、ホットスポットをアクション付きのトランスペアレントUIButtonとして設定しましたが、ホットスポットをダブルタップすると、ホットスポットアクションが2回呼び出されました。そこで、ボタンからアクションを削除し、代わりにシングルタップジェスチャーを添付しました。
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapAction:)];
singleTap.numberOfTapsRequired = 1;
singleTap.delegate = self;
[self.hotspot addGestureRecognizer:singleTap];
[singleTap release];
これは通常のボタン操作と同じです。しかし、その後、私はダブルタップジェスチャーを作成し、そしてrequireGestureRecognizerToFailとシングルタップジェスチャーにブロックするように設定し:この設定で
UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(zoomWebView:)];
doubleTap.numberOfTapsRequired = 2;
doubleTap.delegate = self;
[self.hotspot addGestureRecognizer:doubleTap];
[doubleTap release];
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapAction:)];
singleTap.numberOfTapsRequired = 1;
[singleTap requireGestureRecognizerToFail:doubleTap];
singleTap.delegate = self;
[self.hotspot addGestureRecognizer:singleTap];
[singleTap release];
- (void)zoomWebView:(UITapGestureRecognizer *)gesture {
NSLog(@"double tap");
}
を、ホットスポットのシングルタップはsingleTapActionとのダブルタップを呼び出しますホットスポットはzoomWebView(カスタムメソッド)を呼び出します。これは良いことです。なぜなら、singleTapActionはもう2回呼び出されなくなりましたが、UIWebViewがダブルタップに応答しなくなったためです。
ダブルタップジェスチャーからUIWebViewへのダブルタップイベントの転送を試みました.UITapGestureRecognizerをサブクラス化し、touchesBeganおよびtouchesEndedメソッドをオーバーライドし、引数をUIWebViewの対応するメソッドに送信しました。私がそれをしたとき、私のサブクラスがイベントを受け取っていたのを見ることができましたが、UIWebViewは転送されたイベントに応答しませんでした。 は、UIKitフレームワークオブジェクトではなく、UIViewのカスタムサブクラスにのみイベントを転送できると述べているため、これが予想されます。
ダブルタップのイベントを迂回しないダブルタップにシングルタップジェスチャが応答しないようにする方法はありますか?これは基本的な要件のようですが、私はそれを行うための簡単な方法を見ることはできません。私はUIGestureRecognizerのtouch delivery propertiesを読んで実験しましたが、値の組み合わせはシングルタップジェスチャーがダブルタップジェスチャーを消費するのを止めませんでした。
ところで、ビュー階層内のホットスポットとUIWebViewの関係は、「いとこ」のものです。これらは2つの兄弟ビューのサブビューです。ジェスチャ認識機能をホットスポット表示、ウェブ表示または「祖父母」表示に追加すると、同じ結果が得られます。
わからない、しかし、あなたはにシングルタップジェスチャーを追加することはできません。 UIWebView? –
@DeanPucsek私はしばらくそれをやっていたし、PDF文書を表示するときに機能しました。しかし、UIWebViewに表示されているコンテンツがHTMLまたはJPGの場合、UIWebViewは独自のアクションのためにシングルタップをキャプチャし、UIGestureRecognizerはイベントを受信しません。これをホットスポットビューで処理する方が便利ですが、すべてのUIWebViewコンテンツタイプで動作させることができれば、このアプローチに戻ることができます。 – arlomedia