Как добавить распознаватель жестов в подкласс UIWebView? - PullRequest
3 голосов
/ 21 июля 2010

Если я добавлю распознаватель жестов в экземпляр класса UIWebView, называемый webView, например ::1003*

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

Можно ли что-нибудь сделать, чтобы включить собственный распознаватель жестов в веб-представлении?

Ответы [ 4 ]

5 голосов
/ 22 июля 2010

Насколько я знаю, UIWebView не следует разделять на подклассы, как упомянуто в документации Apple:

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

4 голосов
/ 20 октября 2011

Просто подумал, что добавлю ответ, если кто-нибудь вернется сюда.Вы не назначили делегата, поэтому gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer: не вызывается.

_longPressRecognizer.delegate = self;

Сделайте это, и это хорошо работает.

2 голосов
/ 03 сентября 2010

Вы должны использовать javascript в UIWebView для обнаружения жестов. (Затем вы можете сообщить об этом обратно в Objective-C, если вам нужно.) Это документы Apple об обнаружении жестов и касаний в Javascript. Я также нашел эту статью полезной , хотя он использует библиотеку 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 голосов
/ 21 ноября 2012
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return YES;
}
...