Я хотел бы иметь возможность предсказать окончательное смещение покоя в UIScrollView после жеста щелчка. Он не должен быть точным по пикселям, но достаточно близким, чтобы пользователь не воспринимал разницу (то есть он не двигался чрезмерно меньше или больше, чем он привык).
Я знаю, что кто-то спросит, поэтому: почему? У меня есть элемент управления в виде таблицы в UIScrollView. Я хотел бы сделать так, чтобы самый верхний элемент меню полностью отображался и располагался в верхней части UIScrollView. Функция подкачки UIScrollView не совсем то, что я хочу, потому что сильный щелчок не пролетает кратные границы представления.
Обработка событий обычного касания достаточно проста. На touchesEnded:withEvent:
я могу прокрутить до ближайшего полного пункта меню. Тяжелая часть - замедление.
Есть две константы для скорости замедления, UIScrollViewDecelerationRateNormal
и UIScrollViewDecelerationRateFast
. Их значения 0,998 и 0,990 в iPhone OS 3.0. Я пытался выяснить математику, которую Apple использует для замедления движения, но я выхожу пустой.
Если я могу с некоторой точностью предсказать окончательное смещение покоя, то в начале замедления я могу просто использовать scrollRectToVisible:animated:
, чтобы перейти к смещению, когда пункт меню находится вровень с верхней частью границ вида.
Знают ли какие-нибудь склонные к математике люди, что Apple может делать во время замедления? Должен ли я собрать несколько чисел событий замедления, построить их график и придумать что-нибудь близкое?