2010-07-21 60 views
3

如果我添加一个手势识别来如何将手势识别器添加到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:选择不叫子类的实例UIWebView称为webView,例如:。

我已覆盖委托方法-gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:,但长按选择器仍未调用。

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

有什么我可以做,使我自己的手势识别器在网络视图?

+0

你解决了这个问题吗?我也在研究同一个问题...请帮我解决ip问题.. – Warrior 2010-09-17 11:01:02

+0

它适用于我。你有没有尝试*不设置* allowableMovement和minimumPressDuration?为什么_longPressRecognizer =零?不清楚。 – Alex1987 2011-01-23 22:44:16

+0

如果你已经解决了这个问题,你能否发表答案?我也在寻找同样的东西。您的答复将不胜感激。 – 2013-07-03 06:14:53

回答

2

你应该使用JavaScript在UIWebView中检测到的手势。 (如果需要,您可以将其传回Objective-C。)这些是Apple's docs,用于检测Javascript中的手势和触摸。我也发现这个article很有帮助,虽然他使用一个JavaScript库来处理事件绑定等。

下面是一个工作示例,用于缩放UIWebView的独立缩放。

请注意,它是正在监听事件的正文元素。在一个简短的页面上,如果您在下面的大量未呈现的空白处执行事件,似乎无法捕捉它。 (如果有人知道更多关于它,请发表评论。)

<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> 
+0

我没有控制网页内容,所以这对我的用例没有帮助。 – 2010-09-03 10:52:04

+0

您可以注入'