Как перетащить вид внутри UIScrollView с прокруткой возле краев? - PullRequest
6 голосов
/ 18 марта 2012

Я пытаюсь создать какой-то вид временной шкалы, как в видеоредакторах: элементы мультимедиа в строке, которые UIView. Я могу успешно перетащить эти виды в видимую на данный момент часть вида прокрутки, используя UIScrollView сенсорные события, такие как touchesBegan и touchesMoved. Я хочу прокрутить представление прокрутки, когда подпредставление перетаскивается на один из краев прокрутки. Лучшее, что я могу придумать сейчас, - это создать таймер, который будет прокручивать представление, пока пользователь удерживает подпредставление пальцем возле края представления прокрутки.

Здесь много вопросов по той же теме, но мне не удалось найти тот, который охватывает прокрутку.

Есть ли хороший способ сделать это? Стоит ли вместо этого использовать распознаватели жестов?

Заранее спасибо.

Ответы [ 2 ]

8 голосов
/ 25 марта 2012

На самом деле то, что вы хотите, - это время.Как только пользователь оказывается на краю прокрутки, вы запускаете таймер, который регулярно увеличивает contentOffset.Если вам не нравятся ваши результаты анимации (я полагаю, вы используете setContentOffset:animated:?), Просто попробуйте другое время и расстояние анимации ... Я думаю, вам нужно попробовать несколько других настроек.Сначала я бы попробовал 1 пиксель за раз.Возможно, каждые 0,3 секунды?

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

0 голосов
/ 25 марта 2012

Я серьезно сомневаюсь, что распознаватели жестов могли бы стать хорошим решением, поскольку они, как правило, наиболее полезны при сдержанных жестах.

Не думаю, что смогу улучшить ваше общее направление, исходя из предположения,Выше подразумевалось, что вы ищете непрерывную / постепенную прокрутку.

Вместо этого я предлагаю вам подумать о том, чтобы спроектировать это с использованием метода прокрутки с постраничной прокруткой.Когда ваш пользователь перетаскивает объект к краю просмотра прокрутки, заставьте представление прокрутки перемещать одну страницу в этом направлении (установив параметр contentOffset для перемещения в этом направлении в соответствии с границами представления прокрутки).Когда это даже происходит, слегка выдвиньте объект из «горячей зоны» на краю прокрутки, чтобы пользователь был вынужден явно указать, что он хочет переместить другую страницу или что-то в том же духе, то есть, посколькуПодход к дизайну зависит от этих «событий пейджинга», которые вам нужны для реализации какой-либо системы жестов, чтобы пользователь мог продолжать пейджинг.

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

...