3

ジェスチャレコグナイザーをサブクラス化されたUIWebViewインスタンスに追加するとwebView、たとえば次のようになります。

UILongPressGestureRecognizer *_longPressRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(webViewGestureRecognized:)];
_longPressRecognizer.allowableMovement = 20;
_longPressRecognizer.minimumPressDuration = 1.0f;
[webView addGestureRecognizer:_longPressRecognizer];
[_longPressRecognizer release], _longPressRecognizer = nil; 

-webViewGestureRecognized:長押ししてもセレクターが呼び出されません。

デリゲートメソッドをオーバーライドしました-gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:が、長押しセレクターはまだ呼び出されません。

- (BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return YES;
}

Webビューで自分のジェスチャレコグナイザーを有効にするためにできることはありますか?

4

4 に答える 4

5

私が知る限り、Apple docs に記載されているように UIWebView をサブクラス化するべきではありません:

http://developer.apple.com/iphone/library/documentation/uikit/reference/UIWebView_Class/Reference/Reference.html

于 2010-07-22T16:23:05.513 に答える
4

誰かがここに戻ってきたら、答えを追加すると思いました。デリゲートを割り当てていないため、gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:呼び出されません。

_longPressRecognizer.delegate = self;

これを行うと、うまく機能します。

于 2011-10-20T00:57:45.090 に答える
2

ジェスチャを検出するには、UIWebView で JavaScript を使用する必要があります。(その後、必要に応じてそれを Objective-C に戻すことができます。) これらは、Javascript でのジェスチャとタッチの検出に関するApple のドキュメントです。この記事も役に立ちましたが、彼は JavaScript ライブラリを使用してイベント バインディングなどを処理しています。

これは、スタンドアロンの UIWebView をピンチしてズームする実際の例です。

body 要素がイベントをリッスンしていることに注意してください。短いページでは、下のレンダリングされていない広大な空白でイベントを実行すると、それをキャッチできないように見えます。(詳しく知っている方はコメントください。)

<body id='body'>
    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco 

<script type="text/javascript" charset="utf-8">

    body = document.getElementById('body');

    // (in percents)
    zoom = 100;
    maxZoom = 200;
    minZoom = 50;
    zoomIncrement = 25;

    function gestureEnd(event) {
        var newZoom;
        if (event.scale > 1.0) {
            // increase size
            newZoom = zoom + zoomIncrement;
        } else {
            // decrease size
            newZoom = zoom - zoomIncrement;
        }

        // don't exceed zoom boundaries
        if (newZoom > maxZoom || newZoom < minZoom) {
            return;
        }
        zoom = newZoom;
        body.style.webkitTextSizeAdjust = zoom+"%";
    }

    body.addEventListener("gestureend", gestureEnd, false);

    </script>
</body>
于 2010-09-02T21:33:54.427 に答える
0
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return YES;
}
于 2012-11-21T05:31:35.527 に答える