How can I detect the scroll direction from the UICollectionView?

后端 未结 4 797
日久生厌
日久生厌 2020-12-09 17:52

I have a UICollectionView. I want to detect scroll direction. I have a two different animation style for scroll down and scroll up. So I must learn scroll direction.

相关标签:
4条回答
  • 2020-12-09 18:26

    I was trying to find a way to detect if the user is mostly trying to pull vertically or horizontally the scrollView. I give you my solution, I hope it can be useful to anyone :

    CGPoint _lastContentOffset;
    
    - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
        _lastContentOffset = scrollView.contentOffset;
    }
    
    - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    
        if (ABS(_lastContentOffset.x - scrollView.contentOffset.x) < ABS(_lastContentOffset.y - scrollView.contentOffset.y)) {
            NSLog(@"Scrolled Vertically");
        } else {
            NSLog(@"Scrolled Horizontally");
        }
    
    }
    

    This work find for me and I use this to avoid the scrollView to move horizontally when scrolling vertically and opposite.

    0 讨论(0)
  • 2020-12-09 18:28

    Try this:

    Add this somewhere in you header:

    @property (nonatomic) CGFloat lastContentOffset;
    

    Then override the scrollViewDidScroll: method:

    #pragma mark - UIScrollViewDelegate
    
    - (void)scrollViewDidScroll:(UIScrollView *)scrollView
    {
        if (self.lastContentOffset > scrollView.contentOffset.y)
        {
            NSLog(@"Scrolling Up");
        }
        else if (self.lastContentOffset < scrollView.contentOffset.y)
        {
            NSLog(@"Scrolling Down");
        }
    
        self.lastContentOffset = scrollView.contentOffset.y;
    }
    

    Found in Finding the direction of scrolling in a UIScrollView?

    0 讨论(0)
  • 2020-12-09 18:32

    this is the best way to get scroll direction, hope this helps you

    - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
    
        CGPoint targetPoint = *targetContentOffset;
        CGPoint currentPoint = scrollView.contentOffset;
    
        if (targetPoint.y > currentPoint.y) {
            NSLog(@"up");
        }
        else {
            NSLog(@"down");
        }
    }
    
    0 讨论(0)
  • 2020-12-09 18:42

    Swift 4.2

    private var lastContentOffset: CGFloat = 0
    func scrollViewDidScroll(_ scrollView: UIScrollView) {
    
        if lastContentOffset > scrollView.contentOffset.y && lastContentOffset < scrollView.contentSize.height - scrollView.frame.height {
            // move up
            print("move up")
            originalHeight ()
        } else if lastContentOffset < scrollView.contentOffset.y && scrollView.contentOffset.y > 0 {
            // move down
            print("move down")
            minimizeHeaderView()
        }
    
        // update the new position acquired
        lastContentOffset = scrollView.contentOffset.y
    }
    
    0 讨论(0)
提交回复
热议问题