UIScrollView прокрутка по смещению

4

У меня такая ситуация:

  • один scrollView, соответствующий всем экранам
  • N "Ячейки" внутри scrollView, каждая из них содержит метку
  • каждая ячейка 80px на высоте
  • фиксированная зеленая маска (UIView)

Я программно создаю ячейки (UIView) с меткой внутри и правильно устанавливаю contentSize прокрутки.

Я знаю, что

scrollView.setContentOffset(CGPoint(x: 0, y: 80.0), animated: true)

перемещение прокрутки на 80.

Как я могу "переопределить" поведение прокрутки, чтобы всегда прокручивать на 80? То, что я хочу, это своеобразное поведение сборщика. Возможно ли это?

Изображение 30501

Теги:
iphone
uiscrollview

3 ответа

3

Вы можете использовать следующий метод, когда ваш макет изменится

func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    myScrollView.contentOffset.y += 80
}
1

Никто не отвечает правильно на вопрос, поэтому я сам решил сам:

let viewHeight: CGFloat = 80.0

func scrollViewWillBeginDragging(scrollView: UIScrollView) {
    startContentOffsetY = scrollView.contentOffset.y
}

func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
    targetContentOffsetY = targetContentOffset.memory.y
    if startContentOffsetY - targetContentOffsetY < 0 {
        scrollDirection = ScrollDirection.Bottom.rawValue
    } else {
        scrollDirection = ScrollDirection.Top.rawValue
    }
    let gap = targetContentOffsetY % viewHeight
    var offset: CGFloat = 0.0
    if (targetContentOffsetY - gap) % viewHeight == 0 {
        offset = -gap * scrollDirection
    } else {
        offset = gap * scrollDirection
    }
    let newTarget = targetContentOffsetY + (offset * scrollDirection)
    targetContentOffset.memory.y = newTarget
}
0

может быть что-то вроде этого: (вам нужно добавить некоторые проверки) сделайте класс делегата для просмотра прокрутки (UIScrollViewDelegate)

теперь добавьте эту функцию в свой UIScrollViewDelegate

myScrollView.delegate = instanceOfUIScrollViewDelegate;
func scrollViewDidScroll(scrollView: UIScrollView) {
    scrollView.contentOffset.y+=80;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню