Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про Swift : scrollview, pan, gesture, manual, scrolling

Как реализовать UIScrollView "вручную" с использованием UIView?

Вопрос проверяет понимание механизма прокрутки и умение воспроизвести его без готовых компонентов.

Короткий ответ

Создайте контейнер UIView, добавьте в него контентную вью большего размера, установите pan-жест (UIPanGestureRecognizer) на контейнер, а в обработчике изменяйте bounds.origin или transform контента в зависимости от сдвига пальца. При касании и перемещении контента вручную обновляете положение вью для имитации прокрутки.

Длинный ответ

Иерархия:

  • containerView — области показа, фиксированного размера.

  • contentView — вложенная вью больше containerView.

Жест панорамирования:

let pan = UIPanGestureRecognizer(target: self, action: #selector(didPan))
containerView.addGestureRecognizer(pan)

Обработчик:

@objc func didPan(_ g: UIPanGestureRecognizer) {
    	let translation = g.translation(in: containerView)
    	var newOrigin = contentView.frame.origin
    	newOrigin.y += translation.y
    	// проверка границ: не выйти из допустимой области
    	newOrigin.y = min(0, max(newOrigin.y, containerView.bounds.height - contentView.bounds.height))
    	contentView.frame.origin = newOrigin
    	g.setTranslation(.zero, in: containerView)
}

Фрикционное движение: Можно добавить deceleration и bounce вручную, но это потребует CADisplayLink и расчёта физики.

Вывод:
Реализация собственного скроллинга помогает понять внутренний механизм UIScrollView, но для продакшена рекомендуется встроенный компонент.

Уровень

  • Рейтинг:

    2

  • Сложность:

    6

Навыки

  • Swift

    Swift

Ключевые слова

#scrollview

#pan

#gesture

#manual

#scrolling

Подпишись на iOS Developer в телеграм