2010-07-21 107 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

您可以注入'