代码之家  ›  专栏  ›  技术社区  ›  Alex Reynolds

如何将手势识别器添加到UIWebView子类中?

  •  3
  • Alex Reynolds  · 技术社区  · 15 年前

    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 回复  |  直到 15 年前
        1
  •  5
  •   YNK    15 年前
        2
  •  4
  •   eyuelt    11 年前

    只是想如果有人回来我会加上答案。 因此,您尚未分配代理 gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer: 不被调用。

    _longPressRecognizer.delegate = self;
    

        3
  •  2
  •   zekel lepture    15 年前

    您应该在UIWebView中使用javascript来检测手势。(如果需要的话,你可以把它反馈给Objective-C) Apple's docs 在Javascript中检测手势和触摸。我也发现了这个 article 虽然他使用javascript库处理事件绑定等,但还是很有用的。

    注意,它是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>
    
        4
  •  0
  •   Himanshu THE ONLY ONE    12 年前
    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return YES;
    }