实用小技巧(一):UIScrollView中上下左右滚动方向的判断

https://www.jianshu.com/p/93e8459b6dae

2017.06.01 01:13* 字数 674 阅读 1201评论 0

2017.06.01 01:13* 字数 674 阅读 1201评论 0喜欢 1

版本记录

版本号

时间

V1.0

2017.05.31

前言

ios中又很多实用的小技巧,实现不难很实用,以后我会慢慢的给大家总结。这一篇主要讲述滚动方向的判断。

  滚动视图是app很常用的视图形式,而其中scrollView及其子类UITableView和UICollectionView用的很多,在用的时候有一个需求就是:需要判断当前的滚动方向

  • 向上滚动
  • 向下滚动
  • 向左滚动
  • 向右滚动
  • 下面就以两个例子对滚动方向进行判断,下面我们开始。

详情

一、左右滚动方向的判断

下面我们就以UIScrollView为例子,说明左右滚动是如何判断的,还是先看一下代码组成。

 

代码组成

思路引导

下面我们看,当我们向左滚动时可见,x为正值且越来越大,如下:

2017-06-01 00:15:47.962 scrollDirectionJudge[2981:77203] x==0.333333,y==-64.000000

2017-06-01 00:15:48.026 scrollDirectionJudge[2981:77203] x==1.000000,y==-64.000000

2017-06-01 00:15:48.057 scrollDirectionJudge[2981:77203] x==1.333333,y==-64.000000

2017-06-01 00:15:48.089 scrollDirectionJudge[2981:77203] x==1.666667,y==-64.000000

2017-06-01 00:15:48.122 scrollDirectionJudge[2981:77203] x==2.000000,y==-64.000000

2017-06-01 00:15:48.145 scrollDirectionJudge[2981:77203] x==4.000000,y==-64.000000

2017-06-01 00:15:48.170 scrollDirectionJudge[2981:77203] x==7.666667,y==-64.000000

2017-06-01 00:15:48.194 scrollDirectionJudge[2981:77203] x==11.000000,y==-64.000000

2017-06-01 00:15:48.218 scrollDirectionJudge[2981:77203] x==12.666667,y==-64.000000

2017-06-01 00:15:48.235 scrollDirectionJudge[2981:77203] x==13.000000,y==-64.000000

2017-06-01 00:15:48.956 scrollDirectionJudge[2981:77203] x==13.666667,y==-64.000000

2017-06-01 00:15:49.036 scrollDirectionJudge[2981:77203] x==14.000000,y==-64.000000

反过来,如果我们向右滑动,可见

2017-06-01 00:17:27.177 scrollDirectionJudge[2981:77203] x==412.000000,y==-64.000000

2017-06-01 00:17:27.200 scrollDirectionJudge[2981:77203] x==407.666667,y==-64.000000

2017-06-01 00:17:27.216 scrollDirectionJudge[2981:77203] x==405.333333,y==-64.000000

2017-06-01 00:17:27.240 scrollDirectionJudge[2981:77203] x==402.333333,y==-64.000000

2017-06-01 00:17:27.265 scrollDirectionJudge[2981:77203] x==401.333333,y==-64.000000

2017-06-01 00:17:27.288 scrollDirectionJudge[2981:77203] x==401.000000,y==-64.000000

2017-06-01 00:17:27.353 scrollDirectionJudge[2981:77203] x==400.666667,y==-64.000000

2017-06-01 00:17:27.377 scrollDirectionJudge[2981:77203] x==399.666667,y==-64.000000

2017-06-01 00:17:27.400 scrollDirectionJudge[2981:77203] x==397.666667,y==-64.000000

2017-06-01 00:17:27.416 scrollDirectionJudge[2981:77203] x==395.666667,y==-64.000000

2017-06-01 00:17:27.432 scrollDirectionJudge[2981:77203] x==393.333333,y==-64.000000

2017-06-01 00:17:27.448 scrollDirectionJudge[2981:77203] x==391.666667,y==-64.000000

2017-06-01 00:17:27.473 scrollDirectionJudge[2981:77203] x==390.333333,y==-64.000000

 

那么,我们可见,可以有这个思路,如果我们记录当前的x偏移值,并且用下一时刻临近的x偏移值与之相比较,取差值,如果下一时刻的x偏移值 - 当前x偏移值为正值,则是向左边滑动,反之则为向右滑动。

看输出结果,先看向左滑动

2017-06-01 00:24:38.629 scrollDirectionJudge[3185:84739] x==4.666667,y==-64.000000

2017-06-01 00:24:38.629 scrollDirectionJudge[3185:84739] 正在向左滑动

2017-06-01 00:24:38.652 scrollDirectionJudge[3185:84739] x==10.666667,y==-64.000000

2017-06-01 00:24:38.652 scrollDirectionJudge[3185:84739] 正在向左滑动

2017-06-01 00:24:38.676 scrollDirectionJudge[3185:84739] x==15.666667,y==-64.000000

2017-06-01 00:24:38.677 scrollDirectionJudge[3185:84739] 正在向左滑动

2017-06-01 00:24:38.700 scrollDirectionJudge[3185:84739] x==20.000000,y==-64.000000

2017-06-01 00:24:38.700 scrollDirectionJudge[3185:84739] 正在向左滑动

2017-06-01 00:24:38.726 scrollDirectionJudge[3185:84739] x==22.666667,y==-64.000000

2017-06-01 00:24:38.727 scrollDirectionJudge[3185:84739] 正在向左滑动

2017-06-01 00:24:38.747 scrollDirectionJudge[3185:84739] x==24.333333,y==-64.000000

2017-06-01 00:24:38.748 scrollDirectionJudge[3185:84739] 正在向左滑动

2017-06-01 00:24:38.764 scrollDirectionJudge[3185:84739] x==25.000000,y==-64.000000

2017-06-01 00:24:38.765 scrollDirectionJudge[3185:84739] 正在向左滑动

2017-06-01 00:24:38.792 scrollDirectionJudge[3185:84739] x==25.666667,y==-64.000000

2017-06-01 00:24:38.792 scrollDirectionJudge[3185:84739] 正在向左滑动

在看向右滑动

2017-06-01 00:25:58.949 scrollDirectionJudge[3185:84739] x==27.333333,y==-64.000000

2017-06-01 00:25:58.950 scrollDirectionJudge[3185:84739] 正在向右滑动

2017-06-01 00:25:58.970 scrollDirectionJudge[3185:84739] x==24.333333,y==-64.000000

2017-06-01 00:25:58.970 scrollDirectionJudge[3185:84739] 正在向右滑动

2017-06-01 00:25:58.986 scrollDirectionJudge[3185:84739] x==22.666667,y==-64.000000

2017-06-01 00:25:58.986 scrollDirectionJudge[3185:84739] 正在向右滑动

2017-06-01 00:25:59.002 scrollDirectionJudge[3185:84739] x==21.333333,y==-64.000000

2017-06-01 00:25:59.003 scrollDirectionJudge[3185:84739] 正在向右滑动

2017-06-01 00:25:59.018 scrollDirectionJudge[3185:84739] x==20.000000,y==-64.000000

2017-06-01 00:25:59.019 scrollDirectionJudge[3185:84739] 正在向右滑动

2017-06-01 00:25:59.034 scrollDirectionJudge[3185:84739] x==19.333333,y==-64.000000

2017-06-01 00:25:59.035 scrollDirectionJudge[3185:84739] 正在向右滑动

2017-06-01 00:25:59.054 scrollDirectionJudge[3185:84739] x==18.666667,y==-64.000000

2017-06-01 00:25:59.054 scrollDirectionJudge[3185:84739] 正在向右滑动

2017-06-01 00:25:59.074 scrollDirectionJudge[3185:84739] x==16.000000,y==-64.000000

2017-06-01 00:25:59.074 scrollDirectionJudge[3185:84739] 正在向右滑动

2017-06-01 00:25:59.090 scrollDirectionJudge[3185:84739] x==14.000000,y==-64.000000

2017-06-01 00:25:59.091 scrollDirectionJudge[3185:84739] 正在向右滑动

2017-06-01 00:25:59.115 scrollDirectionJudge[3185:84739] x==11.666667,y==-64.000000

2017-06-01 00:25:59.115 scrollDirectionJudge[3185:84739] 正在向右滑动

2017-06-01 00:25:59.138 scrollDirectionJudge[3185:84739] x==10.666667,y==-64.000000

2017-06-01 00:25:59.139 scrollDirectionJudge[3185:84739] 正在向右滑动

2017-06-01 00:25:59.195 scrollDirectionJudge[3185:84739] x==10.000000,y==-64.000000

2017-06-01 00:25:59.196 scrollDirectionJudge[3185:84739] 正在向右滑动

2017-06-01 00:25:59.251 scrollDirectionJudge[3185:84739] x==9.666667,y==-64.000000

2017-06-01 00:25:59.251 scrollDirectionJudge[3185:84739] 正在向右滑动

 

代码实现

下面我们就直接看代码的实现。

JJHorizontalDirectionVC.m

 

#import "JJHorizontalDirectionVC.h"

 

@interface JJHorizontalDirectionVC () <UIScrollViewDelegate>

    

@property (nonatomic, strong) UIScrollView *textScrollView;

@property (nonatomic, assign) CGFloat lastOffSetX;

 

@end

 

@implementation JJHorizontalDirectionVC

 

#pragma mark - Override Base Function

 

- (void)viewDidLoad

{

    [super viewDidLoad];

    

    [self setupUI];

}

 

#pragma mark - Object Private Function

    

- (void)setupUI

{

    UIScrollView *textScrollView = [[UIScrollView alloc] initWithFrame:self.view.frame];

    textScrollView.backgroundColor = [UIColor greenColor];

    textScrollView.contentSize = CGSizeMake(self.view.bounds.size.width * 2, 0);

    textScrollView.delegate = self;

    [self.view addSubview:textScrollView];

    self.textScrollView = textScrollView;

 

}

    

#pragma mark - UIScrollViewDelegate

    

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

{

    NSLog(@"x==%f,y==%f",scrollView.contentOffset.x,scrollView.contentOffset.y);

    

    if (scrollView.contentOffset.x - self.lastOffSetX > 0) {

        NSLog(@"正在向左滑动");

    }

    else {

        NSLog(@"正在向右滑动");

    }

}

    

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

{

    self.lastOffSetX = scrollView.contentOffset.x;

}

 

@end

 

 

二、上下滚动方向的判断

下面我们就以UIScrollView为例子,说明上下滚动是如何判断的,还是先看一下代码组成。

 

代码组织

思路引导

  前面有了左右方向的判断,相信大家掌握了,那么上下方向的判断也是这个思路。

先看向上滚动的输出

2017-06-01 00:48:03.131 scrollDirectionJudge[3579:100464] x==0.000000,y==0.666667

2017-06-01 00:48:03.148 scrollDirectionJudge[3579:100464] x==0.000000,y==2.000000

2017-06-01 00:48:03.171 scrollDirectionJudge[3579:100464] x==0.000000,y==3.666667

2017-06-01 00:48:03.187 scrollDirectionJudge[3579:100464] x==0.000000,y==5.000000

2017-06-01 00:48:03.203 scrollDirectionJudge[3579:100464] x==0.000000,y==6.000000

2017-06-01 00:48:03.229 scrollDirectionJudge[3579:100464] x==0.000000,y==6.666667

2017-06-01 00:48:03.246 scrollDirectionJudge[3579:100464] x==0.000000,y==7.000000

2017-06-01 00:48:03.733 scrollDirectionJudge[3579:100464] x==0.000000,y==7.333333

2017-06-01 00:48:03.757 scrollDirectionJudge[3579:100464] x==0.000000,y==8.000000

2017-06-01 00:48:03.773 scrollDirectionJudge[3579:100464] x==0.000000,y==8.333333

2017-06-01 00:48:03.797 scrollDirectionJudge[3579:100464] x==0.000000,y==9.333333

2017-06-01 00:48:03.832 scrollDirectionJudge[3579:100464] x==0.000000,y==10.333333

2017-06-01 00:48:03.863 scrollDirectionJudge[3579:100464] x==0.000000,y==11.000000

2017-06-01 00:48:03.981 scrollDirectionJudge[3579:100464] x==0.000000,y==11.333333

2017-06-01 00:48:04.005 scrollDirectionJudge[3579:100464] x==0.000000,y==12.666667

2017-06-01 00:48:04.029 scrollDirectionJudge[3579:100464] x==0.000000,y==14.333333

2017-06-01 00:48:04.047 scrollDirectionJudge[3579:100464] x==0.000000,y==15.000000

2017-06-01 00:48:04.064 scrollDirectionJudge[3579:100464] x==0.000000,y==15.333333

2017-06-01 00:48:04.214 scrollDirectionJudge[3579:100464] x==0.000000,y==16.000000

2017-06-01 00:48:04.237 scrollDirectionJudge[3579:100464] x==0.000000,y==17.000000

2017-06-01 00:48:04.262 scrollDirectionJudge[3579:100464] x==0.000000,y==19.333333

2017-06-01 00:48:04.286 scrollDirectionJudge[3579:100464] x==0.000000,y==21.666667

2017-06-01 00:48:04.311 scrollDirectionJudge[3579:100464] x==0.000000,y==22.666667

2017-06-01 00:48:04.494 scrollDirectionJudge[3579:100464] x==0.000000,y==23.666667

2017-06-01 00:48:04.518 scrollDirectionJudge[3579:100464] x==0.000000,y==24.666667

 

我们在看一下向下滚动

2017-06-01 00:49:12.548 scrollDirectionJudge[3579:100464] x==0.000000,y==735.333333

2017-06-01 00:49:12.571 scrollDirectionJudge[3579:100464] x==0.000000,y==733.333333

2017-06-01 00:49:12.587 scrollDirectionJudge[3579:100464] x==0.000000,y==732.666667

2017-06-01 00:49:12.614 scrollDirectionJudge[3579:100464] x==0.000000,y==732.000000

2017-06-01 00:49:12.660 scrollDirectionJudge[3579:100464] x==0.000000,y==731.666667

2017-06-01 00:49:12.796 scrollDirectionJudge[3579:100464] x==0.000000,y==731.333333

2017-06-01 00:49:12.813 scrollDirectionJudge[3579:100464] x==0.000000,y==730.666667

2017-06-01 00:49:12.831 scrollDirectionJudge[3579:100464] x==0.000000,y==730.000000

2017-06-01 00:49:13.101 scrollDirectionJudge[3579:100464] x==0.000000,y==729.666667

2017-06-01 00:49:13.125 scrollDirectionJudge[3579:100464] x==0.000000,y==729.000000

2017-06-01 00:49:13.149 scrollDirectionJudge[3579:100464] x==0.000000,y==725.666667

2017-06-01 00:49:13.167 scrollDirectionJudge[3579:100464] x==0.000000,y==721.333333

2017-06-01 00:49:13.183 scrollDirectionJudge[3579:100464] x==0.000000,y==717.000000

2017-06-01 00:49:13.204 scrollDirectionJudge[3579:100464] x==0.000000,y==711.000000

2017-06-01 00:49:13.221 scrollDirectionJudge[3579:100464] x==0.000000,y==709.000000

2017-06-01 00:49:13.237 scrollDirectionJudge[3579:100464] x==0.000000,y==707.333333

2017-06-01 00:49:13.265 scrollDirectionJudge[3579:100464] x==0.000000,y==706.333333

 

那么,我们可见,可以有这个思路,如果我们记录当前的y偏移值,并且用下一时刻临近的y偏移值与之相比较,取差值,如果下一时刻的y偏移值 - 当前y偏移值为正值,则是向上边滑动,反之则为向下边滑动。

下面看最后的输出结果,先看向上滑动。

2017-06-01 00:55:03.163 scrollDirectionJudge[3709:105104] x==0.000000,y==139.666667

2017-06-01 00:55:03.163 scrollDirectionJudge[3709:105104] 正在向上滑动

2017-06-01 00:55:03.184 scrollDirectionJudge[3709:105104] x==0.000000,y==143.000000

2017-06-01 00:55:03.184 scrollDirectionJudge[3709:105104] 正在向上滑动

2017-06-01 00:55:03.213 scrollDirectionJudge[3709:105104] x==0.000000,y==146.666667

2017-06-01 00:55:03.213 scrollDirectionJudge[3709:105104] 正在向上滑动

2017-06-01 00:55:03.232 scrollDirectionJudge[3709:105104] x==0.000000,y==149.666667

2017-06-01 00:55:03.232 scrollDirectionJudge[3709:105104] 正在向上滑动

2017-06-01 00:55:03.248 scrollDirectionJudge[3709:105104] x==0.000000,y==151.666667

2017-06-01 00:55:03.248 scrollDirectionJudge[3709:105104] 正在向上滑动

2017-06-01 00:55:03.264 scrollDirectionJudge[3709:105104] x==0.000000,y==153.666667

2017-06-01 00:55:03.265 scrollDirectionJudge[3709:105104] 正在向上滑动

2017-06-01 00:55:03.297 scrollDirectionJudge[3709:105104] x==0.000000,y==155.333333

2017-06-01 00:55:03.297 scrollDirectionJudge[3709:105104] 正在向上滑动

2017-06-01 00:55:03.332 scrollDirectionJudge[3709:105104] x==0.000000,y==156.666667

2017-06-01 00:55:03.332 scrollDirectionJudge[3709:105104] 正在向上滑动

2017-06-01 00:55:03.401 scrollDirectionJudge[3709:105104] x==0.000000,y==157.000000

2017-06-01 00:55:03.401 scrollDirectionJudge[3709:105104] 正在向上滑动

2017-06-01 00:55:03.457 scrollDirectionJudge[3709:105104] x==0.000000,y==157.333333

2017-06-01 00:55:03.457 scrollDirectionJudge[3709:105104] 正在向上滑动

2017-06-01 00:55:03.481 scrollDirectionJudge[3709:105104] x==0.000000,y==158.000000

2017-06-01 00:55:03.481 scrollDirectionJudge[3709:105104] 正在向上滑动

2017-06-01 00:55:03.504 scrollDirectionJudge[3709:105104] x==0.000000,y==158.333333

2017-06-01 00:55:03.505 scrollDirectionJudge[3709:105104] 正在向上滑动

2017-06-01 00:55:03.561 scrollDirectionJudge[3709:105104] x==0.000000,y==159.000000

2017-06-01 00:55:03.561 scrollDirectionJudge[3709:105104] 正在向上滑动

 

在看一下向下滑动

2017-06-01 00:55:30.613 scrollDirectionJudge[3709:105104] x==0.000000,y==734.000000

2017-06-01 00:55:30.614 scrollDirectionJudge[3709:105104] 正在向下滑动

2017-06-01 00:55:30.636 scrollDirectionJudge[3709:105104] x==0.000000,y==730.666667

2017-06-01 00:55:30.637 scrollDirectionJudge[3709:105104] 正在向下滑动

2017-06-01 00:55:30.653 scrollDirectionJudge[3709:105104] x==0.000000,y==728.666667

2017-06-01 00:55:30.653 scrollDirectionJudge[3709:105104] 正在向下滑动

2017-06-01 00:55:30.680 scrollDirectionJudge[3709:105104] x==0.000000,y==723.666667

2017-06-01 00:55:30.680 scrollDirectionJudge[3709:105104] 正在向下滑动

2017-06-01 00:55:30.701 scrollDirectionJudge[3709:105104] x==0.000000,y==717.666667

2017-06-01 00:55:30.702 scrollDirectionJudge[3709:105104] 正在向下滑动

2017-06-01 00:55:30.731 scrollDirectionJudge[3709:105104] x==0.000000,y==711.000000

2017-06-01 00:55:30.732 scrollDirectionJudge[3709:105104] 正在向下滑动

2017-06-01 00:55:30.749 scrollDirectionJudge[3709:105104] x==0.000000,y==705.333333

2017-06-01 00:55:30.749 scrollDirectionJudge[3709:105104] 正在向下滑动

2017-06-01 00:55:30.766 scrollDirectionJudge[3709:105104] x==0.000000,y==701.666667

2017-06-01 00:55:30.767 scrollDirectionJudge[3709:105104] 正在向下滑动

2017-06-01 00:55:30.790 scrollDirectionJudge[3709:105104] x==0.000000,y==698.666667

2017-06-01 00:55:30.790 scrollDirectionJudge[3709:105104] 正在向下滑动

2017-06-01 00:55:30.813 scrollDirectionJudge[3709:105104] x==0.000000,y==697.000000

2017-06-01 00:55:30.813 scrollDirectionJudge[3709:105104] 正在向下滑动

2017-06-01 00:55:30.830 scrollDirectionJudge[3709:105104] x==0.000000,y==696.333333

2017-06-01 00:55:30.830 scrollDirectionJudge[3709:105104] 正在向下滑动

2017-06-01 00:55:30.926 scrollDirectionJudge[3709:105104] x==0.000000,y==695.666667

2017-06-01 00:55:30.927 scrollDirectionJudge[3709:105104] 正在向下滑动

2017-06-01 00:55:30.950 scrollDirectionJudge[3709:105104] x==0.000000,y==694.666667

2017-06-01 00:55:30.951 scrollDirectionJudge[3709:105104] 正在向下滑动

2017-06-01 00:55:30.973 scrollDirectionJudge[3709:105104] x==0.000000,y==692.333333

2017-06-01 00:55:30.974 scrollDirectionJudge[3709:105104] 正在向下滑动

2017-06-01 00:55:30.997 scrollDirectionJudge[3709:105104] x==0.000000,y==690.000000

2017-06-01 00:55:30.998 scrollDirectionJudge[3709:105104] 正在向下滑动

2017-06-01 00:55:31.014 scrollDirectionJudge[3709:105104] x==0.000000,y==688.666667

2017-06-01 00:55:31.015 scrollDirectionJudge[3709:105104] 正在向下滑动

2017-06-01 00:55:31.030 scrollDirectionJudge[3709:105104] x==0.000000,y==687.000000

2017-06-01 00:55:31.031 scrollDirectionJudge[3709:105104] 正在向下滑动

2017-06-01 00:55:31.053 scrollDirectionJudge[3709:105104] x==0.000000,y==684.666667

2017-06-01 00:55:31.054 scrollDirectionJudge[3709:105104] 正在向下滑动

2017-06-01 00:55:31.069 scrollDirectionJudge[3709:105104] x==0.000000,y==683.666667

2017-06-01 00:55:31.070 scrollDirectionJudge[3709:105104] 正在向下滑动

2017-06-01 00:55:31.097 scrollDirectionJudge[3709:105104] x==0.000000,y==682.666667

2017-06-01 00:55:31.097 scrollDirectionJudge[3709:105104] 正在向下滑动

2017-06-01 00:55:31.190 scrollDirectionJudge[3709:105104] x==0.000000,y==681.666667

2017-06-01 00:55:31.191 scrollDirectionJudge[3709:105104] 正在向下滑动

2017-06-01 00:55:31.287 scrollDirectionJudge[3709:105104] x==0.000000,y==681.333333

2017-06-01 00:55:31.287 scrollDirectionJudge[3709:105104] 正在向下滑动

2017-06-01 00:55:31.318 scrollDirectionJudge[3709:105104] x==0.000000,y==681.000000

2017-06-01 00:55:31.319 scrollDirectionJudge[3709:105104] 正在向下滑动

2017-06-01 00:55:31.361 scrollDirectionJudge[3709:105104] x==0.000000,y==680.333333

2017-06-01 00:55:31.361 scrollDirectionJudge[3709:105104] 正在向下滑动

代码实现

看代码实现

JJVerticalDirectionVC.m

 

#import "JJVerticalDirectionVC.h"

 

@interface JJVerticalDirectionVC () <UIScrollViewDelegate>

    

@property (nonatomic, strong) UIScrollView *textScrollView;

@property (nonatomic, assign) CGFloat lastOffSetY;

 

@end

 

@implementation JJVerticalDirectionVC

    

#pragma mark - Override Base Function

 

- (void)viewDidLoad

{

    [super viewDidLoad];

    

    [self setupUI];

}

    

#pragma mark - Object Private Function

    

- (void)setupUI

{

    UIScrollView *textScrollView = [[UIScrollView alloc] initWithFrame:self.view.frame];

    textScrollView.backgroundColor = [UIColor magentaColor];

    textScrollView.contentSize = CGSizeMake(0, self.view.bounds.size.height * 2);

    textScrollView.delegate = self;

    [self.view addSubview:textScrollView];

    self.textScrollView = textScrollView;

    

}

    

#pragma mark - UIScrollViewDelegate

    

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

{

    NSLog(@"x==%f,y==%f",scrollView.contentOffset.x,scrollView.contentOffset.y);

    

    if (scrollView.contentOffset.y - self.lastOffSetY > 0) {

        NSLog(@"正在向上滑动");

    }

    else {

        NSLog(@"正在向下滑动");

    }

}

    

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

{

    self.lastOffSetY = scrollView.contentOffset.y;

}

 

@end

后记

  判断视图的滚动方向是我们经常有的需求,这篇就先介绍到这,后面还会介绍其他的实用小技巧,希望对大家有所帮助,谢谢大家。

 

 

UIScrollView如何判断是向右滚动还是向左滚动

https://blog.csdn.net/www9500net_/article/details/52622815

在做类似网易新闻和今日头条的那个效果时候

 

当我滚动下标为0的时候,也就是第一个标题的时候,往右继续滑动,会重复请求第一个标题的数据

 

同理当我滚动到最后一个标题的时候,会重复请求最后一个标题的数据

 

特此记录下解决方法:

 

1:首先设置pageEnable=YES;

 

然后通过Delegate实现相关方法。

 

2:

 

#pragma mark - 将要开始拖拽,手指已经放在view上并准备拖动的那一刻

 

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{    //拖动前的起始坐标

 

    startContentOffsetX = scrollView.contentOffset.x;

 

}

 

3:

 

#pragma mark -   将要停止前的坐标

 

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

 

    willEndContentOffsetX = scrollView.contentOffset.x;

 

}

 

4:

 

#pragma mark - 减速停止(必须得有快速拖动的动作,scrollView滚动完毕(速度减为0)并且手已经松开的时候调用)

 

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

 

    endContentOffsetX = scrollView.contentOffset.x;

 

    if (endContentOffsetX < willEndContentOffsetX && willEndContentOffsetX < startContentOffsetX) { //画面从右往左移动,前一页

 

    } else if (endContentOffsetX > willEndContentOffsetX && willEndContentOffsetX > startContentOffsetX) {//画面从左往右移动,后一页

 

    }

 

}

--------------------- 

作者:正能量_ 

来源:CSDN 

原文:https://blog.csdn.net/www9500net_/article/details/52622815 

版权声明:本文为博主原创文章,转载请附上博文链接!

 

转载于:https://www.cnblogs.com/sundaysgarden/p/10556452.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/248335.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

less.js

1.变量 2.混入 3.带参的混入 4.选择器的继承&#xff0c;貌似还不支持 5.嵌套规则 6.运算 7.颜色函数 8.条件语句与控制&#xff0c;貌似不支持 9.命名空间 10.注释 11.作用域 12.字符的插入 13.转义 14.JavaScript 的赋值转载于:https://www.cnblogs.com/I-am-fine/archive/20…

SQL限定查询

1、限定查询与排序显示 1.1限定查询的认识&#xff1a; 列&#xff1a;表中有大数据的信息&#xff0c;对数据进行筛选&#xff0c;查询到自己想要的信息。 &#xff08;数据过多显示过慢&#xff0c;或者死机&#xff0c;在已有的样本数据库容器CDB转换为PDB之中&#xff09;…

Centos6.10源码部署zabbix-3.2.6

环境&#xff1a;Centos6.10 已有lnmp环境 mysql5.7 php7.2 创建zabbix数据库 mysql> create database zabbix character set utf8 collate utf8_bin; mysql> grant all privileges on zabbix.* to zabbixlocalhost identified by zabbix; 创建zabbix用户 shell> …

浅谈五大Python Web框架

http://www.csdn.net/article/2011-02-17/292058 导读&#xff1a;作者飞龙写了一篇《浅谈Python Web框架》&#xff0c;文中他介绍了几个Python Web框架和自己对选择框架的分析。在他看来&#xff0c;用Django来快速开发一些Web运用是很不错的选择。以下是文章内容&#xff1a…

主流浏览器和内核及Web标准

目前网络市场的浏览器主流&#xff1a; 课时3&#xff1a;web标准 WEB标准 w3c 万维网联盟组织&#xff0c;制定web标准的机构。 网页主要由三部分组成&#xff1a; 结构&#xff08;Structure&#xff09;、 表现&#xff08;Presentation&#xff09; 行为&#xff08;Beh…

质量属性六个常见属性场景(《淘宝网》为例) 15

六个最常见的系统质量属性分别是&#xff1a;可用性&#xff08;Availability&#xff09;、可修改性&#xff08;Modifiability&#xff09;、性能&#xff08;Performance&#xff09;、安全性&#xff08;Security&#xff09;、可测试性&#xff08;Testability&#xff09…

机器学习中的损失函数 (着重比较:hinge loss vs softmax loss)

https://blog.csdn.net/u010976453/article/details/78488279 1. 损失函数 损失函数&#xff08;Loss function&#xff09;是用来估量你模型的预测值 f(x)f(x) 与真实值 YY 的不一致程度&#xff0c;它是一个非负实值函数&#xff0c;通常用 L(Y,f(x))L(Y,f(x)) 来表示。损失函…

HTML入门第一和第二章

课时4&#xff1a;HTML初识 1、英文名&#xff08;Hyper Text Markup Language&#xff09;超文本标签语言 对网页上的内容进行描述 课时5&#xff1a;HTML骨架 课时6&#xff1a;我的第一个页面及其标签简介 课时7&#xff1a;骨架记忆法 课时8&#xff1a;什么是标签及其分…

mysql 指令

// 授予用户某些权限GRANT ALL ON *.* TO USERHOST;// 进入mysql访问特定数据库mysql -u user -p database_name// 查看数据表结构DESCRIBE table_name;// 加载文本数据到tableLOAD DATA LOCAL INFILE file_path INTO TABLE table_name;// UPDATE语句UPDATE table_name SET col…

flex label 换行

Flex中label换行有两种情况 在AS中赋值&#xff1a; label.text"Online\r\nResources" 在mxml中赋值&#xff1a; text"OnlineResources" 在flash builder中就可以换行显示了。左右有四种对齐方式&#xff0c;上下四种对齐方式。 也就是说mx中的label不支持…

H5第一天

移动Web - 基础&流式布局 目标 了解移动端主要浏览器的内核掌握用谷歌浏览器调试移动端页面&#xff08;重要&#xff09;了解布局视口、视觉视口、理想视口使用mate标签设置理想视口&#xff08;重要&#xff09;了解视网膜屏、物理像素、二倍图会使用background-size设…

python数据结构之字典(未完成)

字典 dic {key:value} 1.字典特性 key必须是唯一的&#xff0c;值不必是唯一。 值可以是任何数据类型&#xff0c;比如list&#xff0c;tuple&#xff0c;字符&#xff0c;数值等。key只能是不可变的数据类型。 同一个key不允许重复&#xff0c;如果出现重复&#xff0c;后一个…

一个textView中的文字设置成两种颜色

使用Spannablestring和ForegroundColorSpan。 SpannableString string2 new SpannableString("自助导入会员和连续开单\n3个月可获得免费短信服务");ForegroundColorSpan span2 new ForegroundColorSpan(getResources().getColor(R.color.worker_main_worker));str…

boost::timer demo

#include <iostream> #include <boost/timer.hpp> //timer的头文件 using namespace boost; //打开boost名字空间int main(int argc, char** argv) {timer t; //定义一个计时器对象,并开始计时/*可度量的最大时间,以小时为单位*/std::cout << "max …

H5的第二天

移动web开发——flex布局 目标 了解flex布局的优缺点及原理能够说出flex布局原理、使用语法、特点&#xff08;重点&#xff09;能够使用flex布局常用属性&#xff08;重点&#xff09;能够独立完成携程移动端首页 1.0 传统布局和flex布局对比 1.1传统布局 兼容性好布局繁…

d3.js 入门指南 - 仪表盘

D3的全称是Data-Driven Documents&#xff08;数据驱动的文档&#xff09;&#xff0c;是一个用来做数据可视化的JavaScript函数库&#xff0c;而JavaScript文件的后缀通常为.js&#xff0c;所以D3被称为D3.js。 d3.js可以定制出各种图形&#xff0c;今天来用d3.js制作一个简易…

[转帖]华为的“大海思”与“小海思”

华为的“大海思”与“小海思” https://www.cnbeta.com/articles/tech/828275.htm没先到华为海思这么狠.. 作为华为的全资子公司&#xff0c;说起海思半导体&#xff0c;大家可能第一时间会想起麒麟处理器。经过多年的持续的研发投入&#xff0c;华为海思自研的麒麟处理器现在确…

H5第三天(1)

响应式布局 ☞核心知识点 less媒体查询 学习目标 掌握less基本语法能够使用less编写css代码能够掌握媒体查询能够使用媒体查询实现响应式布局 Less介绍 维护CSS的弊端 CSS本质上不是一门语言,是一个简单的样式表.代码维护相对老套,不够灵活.LESS介绍 ☞LESS预处理器: 依…

CocosPods 引入项目,哪些文件需要上传到服务器呢?

以上除Podfile外&#xff0c;其它三个文件都不是必须提交的。其中Pods目录没必要提交&#xff0c;里面的文件都是根据Podfile描述的依赖库的配置信息下载和生成的文件。因为CocoaPods支持语义化版本号&#xff0c;所以需要Podfile.lock文件记住当前使用的版本&#xff0c;当然这…

H5第三天(2)

移动web响应式布局 ☞知识点-回顾 1. 什么是弹性盒子(伸缩布局) 2. 伸缩布局解决了什么问题 3. 伸缩盒子特点 有一条默认水平显示的主轴有一条始终要垂直于主轴的侧轴 4.重点掌握的属性 设置伸缩盒子 display: flex;设置主轴对齐方式 justify-content设置侧轴对齐方式 a…