【问题标题】:How to add a gesture recognizer to a UIWebView subclass?如何将手势识别器添加到 UIWebView 子类?
【发布时间】:2011-03-19 03:16:48
【问题描述】:

如果我将手势识别器添加到名为 webView 的子类 UIWebView 实例中,例如:

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;
}

我可以做些什么来在网络视图上启用我自己的手势识别器?

【问题讨论】:

  • 你解决了这个问题吗?我也在处理同样的问题...请帮助我解决这个问题..
  • 它对我有用。您是否尝试过 not setting allowableMovement 和 minimumPressDuration ?为什么 _longPressRecognizer = nil ?不清楚。
  • 如果您解决了这个问题,能否请您发布答案?我也在寻找相同的。您的回复将不胜感激。

标签: iphone uiwebview uigesturerecognizer


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    只是想如果有人回到这里,我会添加答案。 您尚未分配委托,因此不会调用 gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:

    _longPressRecognizer.delegate = self;
    

    这样做,效果很好。

    【讨论】:

      【解决方案3】:

      您应该在 UIWebView 中使用 javascript 来检测手势。 (然后,如果需要,您可以将其传达回 Objective-C。)这些是 Apple's docs 用于检测 Javascript 中的手势和触摸。我还发现这个article 很有帮助,尽管他使用 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>
      

      【讨论】:

      • 我无法控制 Web 内容,因此这对我的用例没有帮助。
      • 你能注入一个&lt;script&gt;标签来包含你自己的javascript文件吗?
      • @Alex Reynolds 你可以打电话给[myWebView stringByEvaluatingJavaScriptFromString:javascriptString] 注入它。
      【解决方案4】:
      - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
      return YES;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多