UIWebView scrollTo должен вести себя плавно - PullRequest
9 голосов
/ 09 августа 2011

Я не знаю, правильно ли я спросил в заголовке вопроса, но здесь я кратко опишу

У меня есть UIWebView и загрузка контента на основе div, и каждый div имеет уникальный идентификатор в loadRequest.Как будто мой контент был слишком большим, поэтому я разбивался на части и загружал оставшийся контент, когда вы нажимали «Подробнее»

. Это событие «Подробнее» запускается при автопрокрутке, которую я обрабатываю через javascript.поэтому, как только это событие сработало, оно просто добавляет данные (для которых у меня есть другой метод), используя window.location.href = div1 + div2 (это просто пример).

Теперь главная проблема заключается в том, когда я scrollDownи когда я получаю сообщение «Подробнее», он автоматически запускается, затем добавляет данные к текущему элементу div и показывает (пользователь чувствует, что он продолжает чтение), но когда

, я прокручиваю в направлении вверх Он ведет себя устарелым, потому что просто добавляет данные в div и прокручивает в setYScroll (updatedLocation);

updatedLocation используется, когда мы добавляем контент в Div, и он должен прокручиваться в ту же позицию, гдепользователь был.

, так что давайте начнем с примера, предположим, что в настоящее время я читаю div2, и когда я прокручиваю up события 'Read More', запускаемые и добавляем div1 в div2, а затем в веб-просмотрвызвал делегат shouldStartLoadWithRequest.

, поэтому каждый раз, когда вы обновляете содержимое до div2, когда вы выполняете прокрутку, но сначала он возвращает мне предыдущее местоположениеиз div1 и затем возьмите меня в место div2, где я в настоящее время читал.так что я чувствую себя действительно уставшим, внезапно он на некоторое время уводит меня куда-то и уносит меня к моему текущему положению с точностью до секунды

Я пытался с этим решением, я думал сделать снимок экрана и создать imageViewс этим снимком экрана текущего UIWebView и включите веб-просмотр всякий раз, когда происходит событие «Подробнее».После завершения загрузки веб-представления удалите imageView и отобразите веб-просмотр.но это происходит точно так же, проблема в том, что все происходит под делегатом веб-просмотра.Я до сих пор не мог понять, что происходит?Решение этой проблемы - я на правильном пути или есть лучшее решение для этого

Ответы [ 3 ]

1 голос
/ 26 февраля 2012

У меня похожая ситуация.То, что я делаю, это два UIWebView друг на друга.Когда пришло время обновить одно представление, я беру позицию прокрутки, загружаю новые данные в скрытый UIWebView, когда другой UIWebView завершает загрузку своих данных, он устанавливает свою позицию прокрутки в текущую позицию прокрутки первого веб-просмотра, затем скрываетпервый веб-просмотр и показывает себя.Это довольно легко и работает очень хорошо.

0 голосов
/ 30 сентября 2011

Если я правильно понимаю ваш вопрос, похоже, вы пытаетесь реализовать собственную концепцию «бесконечной прокрутки».

Возможно, стоит потратить время на одну из множества библиотек бесконечной прокрутки , которые уже существуют. Если кто-то не соответствует вашим требованиям, вы можете найти вдохновение, необходимое для того, чтобы исправить то, что у вас есть сейчас.

0 голосов
/ 10 августа 2011

Я подозреваю, что ваш "прыжок" зависит от того, что веб-представление полностью перерисовано (и мы все знаем, что UIWebView медленно).

Итак, я вижу 2 варианта:

  1. полностью реализуют механику «Читать далее» в javascript с помощью Ajax;

  2. вместо загрузки данных в представление с использованием loadRequest,сделайте NSConnection для этого URL, а затем обновите веб-представление, вставив в него HTML, полученный от NSConnection до stringByEvaluatingJavaScriptFromString.

Второй вариант, возможно, более приятный, потому чтоон полностью основан на SDK, но вы увидите, что он намного сложнее, чем первый.Они оба сработают, и я уверен, что это даст вам плавное поведение, за которым вы следуете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...