Подтвердить что ты не робот

Как узнать, как прокручивается UITableView

Есть ли способ, которым мы можем знать, прокручивается ли UITableView в направлении вверх или вниз?

4b9b3361

Ответ 1

-(void) scrollViewDidScroll:(UIScrollView *)scrollView
{
    CGPoint currentOffset = scrollView.contentOffset;
    if (currentOffset.y > self.lastContentOffset.y)
    {
        // Downward
    }
    else
    {
        // Upward
    }
    self.lastContentOffset = currentOffset;
}

Ответ 2

-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView 
                    withVelocity:(CGPoint)velocity 
             targetContentOffset:(inout CGPoint *)targetContentOffset{

    if (velocity.y > 0){
        NSLog(@"up");
    }
    if (velocity.y < 0){
        NSLog(@"down");
    }
}

Ответ 3

Можем ли мы это сделать?

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {

      if ([scrollView.panGestureRecognizer translationInView:scrollView].y > 0) {
        // down
      } else {
        // up
      }

    }

Ответ 4

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

Аргумент для одного из этих методов делегатов (-scrollViewDidScroll:) - это прокрутка, прокручивающаяся, вы можете сравнить ее с табличными представлениями, чтобы узнать, какой из них был прокручен.


Извините, я неправильно понял ваш вопрос. Я думал, вы хотите узнать, какой вид таблицы просматривается (я пропустил "путь" ).

Чтобы знать направление, в котором вы можете сохранить предыдущее смещение в переменной, проверьте, является ли delta (current.y - previous.y) положительным (прокрутка вниз) или отрицательным (прокрутка вверх).

Ответ 5

Вы можете отслеживать разницу в смещении контента. Сохраните старый элемент в статической переменной и проверьте его. Если старое значение ниже, то прокрутка была направлена ​​вниз и наоборот.

Ответ 6

  override func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {

        if targetContentOffset.memory.y < scrollView.contentOffset.y {
            //println("Going up!")

        } else {
           // println("Going down!")

        }
    }

Ответ 7

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
   if (yourTableView.isDragging || yourTableView.isDecelerating)
       {
                // your tableview is scrolled.
               // Add your code here
       }
}

Здесь вы должны заменить свое имя таблицы, а не "yourTableView".

yourTableView.isDragging. Он возвращает YES, если пользователь начал прокрутку. для начала может потребоваться некоторое время и/или расстояние для перехода.

yourTableView.isDecelerating. Он возвращает YES, если пользователь не перетаскивает (коснитесь вверх), но просмотр прокрутки все еще перемещается.

Ответ 8

Вы можете сделать это, реализовав метод UIScrollView delegate таким образом, это изящно.

PS: lastOffset и scrollingUpward - свойство ViewController.

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGPoint currentOffset = scrollView.contentOffset;
    self.scrollingUpward = currentOffset.y > self.lastOffset.y;
    self.lastOffset = currentOffset;
}