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

据我所知 UIWebView 不应该像Apple文档中提到的那样被子类化:

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。)这些是Apple关于在 Javascript 中检测手势和触摸的文档。我也发现这篇文章很有帮助,尽管他使用 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 回答