UICollectionViewがあります。スクロール方向を検出したい。下にスクロールと上にスクロールの2つの異なるアニメーションスタイルがあります。だから私はスクロール方向を学ばなければならない。
CGPoint scrollVelocity = [self.collectionView.panGestureRecognizer
velocityInView:self.collectionView.superview];
if (scrollVelocity.y > 0.0f)
NSLog(@"scroll up");
else if(scrollVelocity.y < 0.0f)
NSLog(@"scroll down");
これは指で触れるだけの作業です。私のために働かない
これを試して:
これをヘッダーのどこかに追加します。
@property (nonatomic) CGFloat lastContentOffset;
次に、scrollViewDidScroll:
方法:
#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;
}
これはスクロール方向を取得するための最良の方法です。これが役立つことを願っています
- (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");
}
}
ユーザーが主にscrollViewを垂直または水平にプルしようとしているのかどうかを検出する方法を見つけようとしていました。私は私の解決策をあなたに与えます、それが誰にとっても役に立つことを願っています:
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");
}
}
この作業は私にとってもわかります。私はこれを使用して、垂直方向および反対方向にスクロールするときにscrollViewが水平方向に移動しないようにします。
Swift 4.2
private var lastContentOffset: CGFloat = 0
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if lastContentOffset > collectionView.contentOffset.y && lastContentOffset < collectionView.contentSize.height - collectionView.frame.height {
// move up
print("move up")
originalHeight ()
} else if lastContentOffset < collectionView.contentOffset.y && collectionView.contentOffset.y > 0 {
// move down
print("move down")
minimizeHeaderView()
}
// update the new position acquired
lastContentOffset = collectionView.contentOffset.y
}