實用小技巧(一):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.pswp.cn/news/248335.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/248335.shtml
英文地址,請注明出處:http://en.pswp.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…