Как работает UIScrollView, как прокрутка? - PullRequest
1 голос
/ 09 декабря 2010

по моему мнению, у iPhone есть большое преимущество перед другими смартфонами из-за его интуитивно понятных, плавных и приятных на ощупь компонентов прокрутки в UIKit. Я хочу реализовать простую игру с UIKit, которая использует этот вид прокрутки, но я не могу использовать UIScrollView, потому что она недостаточно настраиваема.

Я попытался реализовать эту прокрутку сам и попробовал два разных подхода:

  1. Я использовал UIPanGestureRecognizer и переместил границы своего пользовательского элемента управления в соответствии с переводом, который распознаватель доставляет мне. Чтобы получить плавную прокрутку после поднятия пальца во время движения, я запускаю анимацию. Я использую скорость, которую распознаватель дает мне, и фиксированное время, чтобы вычислить, как далеко он должен прокручиваться после того, как я поднял палец. Я попробовал линейное движение и движение замедления, но оба выглядят странно. (позже)

  2. Я использую OnTouchMoved и OnTouchEnded для реализации прокрутки. В OnTouchMove я перемещаю границы в соответствии с движением пальца. Пока палец движется, я вычисляю разницу в местоположении и времени текущего и последнего касания, чтобы вычислить скорость самостоятельно. Когда палец поднимается, я запускаю анимацию в OnTouchEnded, как в 1., но вместо этого я использую свою вычисленную скорость.

Оба подхода не дают мне желаемых результатов. Подняв палец, прокрутка не продолжается плавно. Кажется, что есть (крутой) изгиб кривой скорости.

Кто-нибудь знает, как яблоко делает эту плавную прокрутку? Мое текущее предположение состоит в том, что моя интерполяция с двумя действительно близкими точками является неточной и не учитывает текущее ускорение.

Спасибо за ваши мысли! Кие

1 Ответ

3 голосов
/ 05 ноября 2011

Почему бы вам не добавить UIScrollView в качестве дескриптора поверх вашего представления, без видимого содержимого.Затем вы можете использовать методы UIScrollViewDelegate для обновления вашего реального представления об определенных действиях.Например: если вы захватываете прокрутку UIScrollView с помощью scrollViewDidScroll:, вы можете обновить видимый вид со смещением прокрутки.Вы можете использовать scrollViewWillEndDragging: чтобы начать синхронизацию основного вида с scrollview, и scrollViewDidEndDecelerating, чтобы остановить синхронизацию.

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

...