Изменить скорость прокрутки UIScrollView - PullRequest
3 голосов
/ 07 января 2010

В моем приложении у меня есть представление, которое расширяет UIScrollView и заполняет его содержимое по мере прокрутки пользователем. Однако, если пользователь прокручивает слишком быстро, представления, заполняемые в UIScrollView, не создаются вовремя, и вы действительно можете видеть фон UIScrollView. Причина этого заключается в том, что я выполняю эту ленивую загрузку в layoutSubviews, кажется, не вызывается каждый раз, когда изменяется свойство contentOffset.

Если вы прокручиваете UIScrollView медленно, вы не сталкиваетесь с проблемой, описанной выше, и содержимое загружается достаточно быстро.

Единственное решение этой проблемы, о котором я могу подумать, это сделать так, чтобы UIScrollView не прокручивал быстрее, чем определенная скорость, когда пользователь поднимает палец от экрана.

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

Ответы [ 2 ]

1 голос
/ 21 декабря 2010

scroll.pagingEnabled = YES;

0 голосов
/ 21 апреля 2015

У меня была точно такая же проблема. Я решил это с помощью двухстороннего подхода (iOS 8.3, Swift 1.2):

  1. Подготовка

    • Добавьте делегата с прокруткой в ​​ваш класс:

      class myCustomClassName:UIViewController,UIScrollViewDelegate
      {
      }
      
    • Сделал мой класс делегатом для просмотра прокрутки:

      self.myScrollView.delegate = self
      
    • Добавлен метод делегата, в котором я получаю contentOffset (прокручиваемая позиция):

      func scrollViewDidScroll(scrollView: UIScrollView)
      {
          //some code...
      }
      
  2. Добавлены «диапазоны содержимого» с проверками bool, если данные уже добавлены:

    func scrollViewDidScroll(scrollView: UIScrollView)
    {
        //Total products = TP
        if self.useScrollViewDynamicLoading
        {
            var scrollPosition:CGFloat = scrollView.contentOffset.y
            switch scrollPosition
            {
                case 200.0...300.0:
                //TP = 24
                if self.checkIfProductsInGivenRangeHaveAlreadyBeenAdded(18)
                {
                    loadProductsForProductRange(12)
                }
                case 600.0...700.0:
                //TP = 36
                if self.checkIfProductsInGivenRangeHaveAlreadyBeenAdded(24)
                {
                    loadProductsForProductRange(18)
                }
            }
            ....
    
  3. В viewDidLoad() изменена скорость замедления прокрутки:

    self.myScrollView.decelerationRate = 0.5
    
...