Вопрос проверяет понимание механизма прокрутки и умение воспроизвести его без готовых компонентов.
Создайте контейнер 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, но для продакшена рекомендуется встроенный компонент.