Как установить / исправить положение покоя содержимого UIScrollView после его прокрутки - PullRequest
1 голос
/ 16 ноября 2009

Я реализую представление, похожее на представление таблицы, которое содержит строки данных. Что я пытаюсь сделать, так это то, что после прокрутки каждая строка привязывается к набору правильных положений, поэтому границы верхнего и нижнего ряда полностью видны - и не обрезаются, как это обычно происходит. Есть ли способ получить назначение прокрутки до начала прокрутки? Таким образом, я смогу исправить окончательную y-позицию, например, в кратных высоты строки.

1 Ответ

3 голосов
/ 16 ноября 2009

Я задавал тот же вопрос пару недель назад.

Определенно нет общедоступного API для определения окончательного смещения Y покоя при замедлении прокрутки. После дальнейших исследований я не смог понять формулу Apple о том, как они управляют замедлением. Я собрал кучу данных по событиям прокрутки, записав начальную скорость и пройденный путь замедления, и из этого сделал приблизительные оценки того, где он может остановиться.

Моя цель состояла в том, чтобы заранее предсказать, где он остановится, и преобразовать замедление в конкретное движение в смещение. Проблема с этой техникой заключается в том, что scrollRectToVisible:animated: всегда происходит в течение заданного периода времени, поэтому вместо скорости, которую пользователь ожидает от жеста щелчка, он либо намного быстрее, либо намного медленнее, в зависимости от силы щелчка.

Другой вариант - наблюдать замедление и ждать, пока оно замедлится до некоторого порогового значения, затем вызвать scrollRectToVisible:animated:, но даже это трудно сделать "правильно".

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

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