UITableView с пейджингом и импульсом

НАБЛЮДЕНИЯ

Я обнаружил некоторые «странные» вещи о том, как UITableViews / UIScrollViews прокручиваются в Objective-C для iOS после того, как вы подняли палец:

«Скорость» представления прокрутки (как вscrollViewWillEndDragging:withVelocity:targetContentOffset:) основан не на времени, а на «рендеринге», «обновлении кадра» и т. п .; то есть «скорость» 3,0 означает, что представление прокрутки будет прокручивать 3,0 пункта до следующего обновления, и в этот момент оно будет прокручивать еще 3,0 пункта, если «скорость» все еще равна 3,0. (в отличие от абсолютной скорости, основанной на времени)

«Обновления» происходят ок. 950 раз в секунду, но это варьируется и не является надежным. (опять же, в отличие от абсолютного времени-ба, скорость обновления sed)

Поскольку UIScrollViews замедляются экспоненциально, а не линейно,decelerationRate является геометрической постоянной Это означает, что при каждом «обновлении» вида прокрутки его «скорость» устанавливается равной предыдущей скорости, умноженной на «скорость замедления».

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

ЖЕЛАЕМОЕ ПОВЕДЕНИЕ / ПРОБЛЕМА

Я вывел уравнение, которое теоретически можно решить, чтобы скорректировать скорость замедления, чтобы представление прокрутки могло естественным образом прокручиваться с импульсом и располагаться достаточно близко к верхней части ячейки табличного представления, чтобы имитировать «разбиение на страницы». (У меня также есть анимация, добавленная кscrollViewDidEndDragging:willDecelerate: настроить смещение контента минимально. Регулировка смещения контента без регулировки. DecelerationRate выглядит странно; представление прокрутки либо прыгает вперед, либо внезапно отклоняется назад.)

Это уравнение:Aд ^ н + бд + с = 0 где д =decelerationRate, В идеале я хотел бы что-то в формед (н, а, б, в), но мой друг по математике говорит мне, что это невозможно детерминистически. Он указал мне на следующую страницу:http://en.wikipedia.org/wiki/Root-finding_algorithm

Я также обнаружил, что не могу анимировать представление прокрутки с заданным смещением содержимого, используя стиль анимацииUIViewAnimationCurveEaseOut потому чтоsetContentOffset:animated: не беретoptions: параметр. В противном случае я бы «фальсифицировал» прокрутку до смещения моего предварительно рассчитанного содержимого.

(Я нашел это на SO, но у меня это не сработало:UIScrollview setContentOffset с нелинейной анимацией?)

Я хотел бы использовать табличное представление, потому что все мои элементы в моем представлении прокрутки будут по существу ячейками, и табличные представления лучше всего подходят для отображения списка ячеек. Однако, исходя из моих трудностей с получением желаемого поведения, я мог бы просто сделать просмотр прокрутки, что, вероятно, будет проще. Затем я могу просто ограничить количество «ячеек», видимых в моем настраиваемом «представлении таблицы», или загрузить их по мере необходимости.

Каковы ваши идеи / мысли / предложения?

До сих пор я не нашел существующих примеров того, что мне хотелось бы.

ИЛЛЮСТРАЦИИ

 ИЛИ ЖЕ

Ответы на вопрос(1)

Ваш ответ на вопрос