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 с нелинейной анимацией?)
Я хотел бы использовать табличное представление, потому что все мои элементы в моем представлении прокрутки будут по существу ячейками, и табличные представления лучше всего подходят для отображения списка ячеек. Однако, исходя из моих трудностей с получением желаемого поведения, я мог бы просто сделать просмотр прокрутки, что, вероятно, будет проще. Затем я могу просто ограничить количество «ячеек», видимых в моем настраиваемом «представлении таблицы», или загрузить их по мере необходимости.
Каковы ваши идеи / мысли / предложения?До сих пор я не нашел существующих примеров того, что мне хотелось бы.
ИЛЛЮСТРАЦИИИЛИ ЖЕ