首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何准确知道UIScrollView的滚动何时停止?

准确知道UIScrollView的滚动何时停止,可以通过以下方法实现:

  1. 监听UIScrollView的滚动事件:

在UIScrollView的代理方法中,可以通过实现以下方法来监听滚动事件:

代码语言:swift
复制
func scrollViewDidScroll(_ scrollView: UIScrollView) {
    // 在这里可以监听滚动事件
}
  1. 判断滚动是否停止:

在监听滚动事件的方法中,可以通过判断UIScrollView的isDraggingisDecelerating属性来判断滚动是否停止。isDragging表示用户是否正在拖动滚动视图,而isDecelerating表示滚动视图是否正在减速。当这两个属性都为false时,表示滚动已经停止。

代码语言:swift
复制
func scrollViewDidScroll(_ scrollView: UIScrollView) {
    if !scrollView.isDragging && !scrollView.isDecelerating {
        // 滚动已经停止
    }
}
  1. 使用定时器检测滚动状态:

如果以上方法无法满足需求,可以使用定时器定期检测UIScrollView的滚动状态。具体实现方法如下:

代码语言:swift
复制
var timer: Timer?

func startMonitoringScrolling() {
    timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(checkScrollingStatus), userInfo: nil, repeats: true)
}

@objc func checkScrollingStatus() {
    if !scrollView.isDragging && !scrollView.isDecelerating {
        timer?.invalidate()
        timer = nil
        // 滚动已经停止,执行相关操作
    }
}

通过以上方法,可以准确地知道UIScrollView的滚动何时停止。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【IOS开发基础系列】UIScrollView专题

ScrollView本身不能绘制,除非显示水平和竖直指示器。滚动视图必须知道内容视图大小,以便于知道什么时候停止;一般而言,当滚动出内容边界时,它就返回了。         ...某些对象是用来管理内容显示如何绘制,这些对象应该是管理如何平铺显示内容子视图,以便于没有子视图可以超过屏幕尺寸。就是当用户滚动时,这些对象应该恰当增加或者移除子视图。          ...因为滚动视图没有滚动条,它必须知道一个触摸信号是打算滚动还是打算跟踪里面的子视图。...可以由canCancelContentTouches这个方法运用来解释UIScrollView如何控制手势。          ...假如是 NO,那么滚动到达边界会立刻停止

57430
  • UIScrollView

    前面两篇文章聊UITableView和UICollectionView都是继承自UIScrollView,本篇文章就来简单聊聊UIScrollView。 ?...contentOffset是scrollView实际滚动区域左上角与视图可视区域左上角距离。 pagingEnabled是是否以一页大小整体进行滚动,也就是用来实现翻页效果。...UIScrollView一些常用代理方法如下: #pragma mark - UIScrollViewDelegate //监听页面滚动,根据scrollView.contentOffset来做业务逻辑...中断一些业务逻辑,比如视频、gif播放(在列表拖动时候停止播放gif和视频) - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView...用于页面滚动停止时候开启一个逻辑,比如视频自动播放(页面停止滚动后,开启视图滚动前暂停gif或者视图播放) - (void)scrollViewDidEndDecelerating:(UIScrollView

    89920

    如何判断 ScrollView、List 是否正在滚动

    Delegate 方式获知当前滚动状态,主要依靠以下三个方法:scrollViewDidScroll(_ scrollView: UIScrollView)开始滚动时调用此方法scrollViewDidEndDecelerating...(_ scrollView: UIScrollView)手指滑动可滚动区域后( 此时手指已经离开 ),滚动逐渐减速,在滚动停止时会调用此方法scrollViewDidEndDragging(_ scrollView...,则发送滚动状态停止信号 DispatchQueue.main.asyncAfter(deadline: .now() + 0.15) {...判断准确度没有前两种方式高当可滚动组件中内容出现了非滚动引起尺寸或位置变化( 例如 List 中某个视图尺寸发生了动态变化 ),本方式会误判断为发生了滚动,但在视图变化结束后,状态会马上恢复到滚动结束滚动开始后...( 状态已变化为滚动中 ),保持手指处于按压状态并停止滑动,此方式会将此时视为滚动结束,而前两种方式仍会保持滚动状态直到手指结束按压IsScrolling我将后两种解决方案打包做成了一个库 —— IsScrolling

    3.8K40

    iOS滚动视图UIScrollView使用方法

    //设置滚动条指示器类型,默认是白边界上黑色滚动条 self.scrollView.indicatorStyle = UIScrollViewIndicatorStyleDefault;...//开始进行拖动时调用 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{ } //抬起手指停止拖动时调用...)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{ } //减速完毕停止滚动时调用,这里读取contentOffset...属性就是最终停止位置 - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{ } 这里在view中添加了一个设置了大小...,但是是滚动下来才能看得见: 基本方法代码中注释已经讲很清楚了,如果有不太清楚可以自己试着调一下,也可以一起讨论讨论~ 可以在github上下载我工程:https://github.com/Cloudox

    1.5K20

    两个imageView实现图片轮播

    DirectionRight : DirectionNone; } 重写directionsetter方法,根据滚动方向来设置下一张图片显示,如果是往左边滚动,那么下一张图片位置应该在右边...,如果是往右滚动,那么下一张图片位置应该在左边。...自动滚动 轮播功能实现了,接下来就是添加定时器让它自动滚动了。...*)scrollView { [self pauseScroll]; } 拖拽时停止定时器 当我们手动拖拽时候,需要停止自动滚动,此时我们只需要关闭定时器就行了,当我们拖拽结束时候...{ [self startTimer]; } 加载图片 在实际开发中,我们很少自动轮播本地图片,大部分都是服务器获取图片url,也有可能既有本地图片,又有网络图片,那么该如何加载呢

    1.1K30

    iOS 多个scrollview联动(附DEMO)

    Untitled.gif 结构解读: 底层有一个UIScrollview子类,这里叫它mainScrollview; mainScrollview下方嵌套了两个视图(通常这两个视图也用UIScrollview...毫无疑问,我们通常做法是在mainScrollview下方先嵌套一个横向滚动UIScrollview子类,再在这个横向滚动视图上嵌套n个子模块(像gif中“图文详情”和“客户评分”两个子模块)...尝试过思路: 有一种思路总结起来是,通过开启或者禁止mainScrollview和moduleScrollview交互来达到何时响应某个scrollview目的。...值得注意是,UIScrollview实现了这个协议方法,所以,我们可以让子模块直接继承UIScrollview(或其子类),然后重写该方法。...如此一来,我们需要做,仅仅是判断何时不让某个scrollview改变偏移量即可。

    2.2K70

    iOS-UIScrollerView

    UIScrollerView常见属性 CGPoint contentOffset 这个属性用来表示UIScrollerView滚动位置(其实就是内容左上角与ScrollerView左上角间距值...四周增加额外滚动区域,一般用来避免scrollerView内容被其他控件挡住 UIScrollerView无法滚动原因 没有设置contentSize scrollEnabled = NO 没有收到触摸事件...{ NSLog(@"减速完毕,停止滑动"); } ScrollerView缩放代理回调 必须设置scrollerView缩放比例 scrollerView.maximumZoomScale...*)scrollView{ return [UIView new]; } ScrollerView缩放代理回调 //滚动视图在和方法实现结束时调用此方法,但仅在请求动画时调用setContentOffset...)scrollViewDidScrollToTop:(UIScrollView *)scrollView{ NSLog(@"滚动视图在完成滚动到内容顶部时发送此消息"); } UIScrollerView

    17510

    两个imageView实现图片轮播

    DirectionRight : DirectionNone; } 重写directionsetter方法,根据滚动方向来设置下一张图片显示,如果是往左边滚动,那么下一张图片位置应该在右边...,如果是往右滚动,那么下一张图片位置应该在左边。...自动滚动 轮播功能实现了,接下来就是添加定时器让它自动滚动了。...*)scrollView { [self pauseScroll]; } 拖拽时停止定时器 当我们手动拖拽时候,需要停止自动滚动,此时我们只需要关闭定时器就行了,当我们拖拽结束时候...{ [self startTimer]; } 加载图片 在实际开发中,我们很少自动轮播本地图片,大部分都是服务器获取图片url,也有可能既有本地图片,又有网络图片,那么该如何加载呢

    1.1K50

    iOS开发UIScrollView使用详解 原

    iOS开发UIScrollView使用详解 一、ScrollView常用方法和属性 @property(nonatomic)CGPoint contentOffset; 设置滚动偏移量 @property...,默认为NO,当设置为YES时,你滚动视图只能同一时间在一个方向上滚动,但是当你从对角线拖动时,是时刻在水平和竖直方向同时滚动。...dragging; 获取用户是否开始拖动视图 @property(nonatomic,readonly,getter=isDecelerating) BOOL decelerating; 获取视图是否开始减速(用户停止拖动但视图仍在滚动...scale; 视图内容结束缩放时触发方法 - (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView;  返回yes,开启快捷滚动回顶端...,将要滚动时调用 - (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView; 视图快捷滚动回顶端开始动作时调用 疏漏之处 欢迎指正 专注技术

    1.6K30

    VVeboTableView 源码解析

    快速滚动,保存目标滚动范围前后三行索引 知道如何使用needLoadArr,我们看一下needLoadArr里面的元素是如何被添加和删除。...needLoadArr末尾 [needLoadArr addObjectsFromArray:arr]; } } 知道如何向needLoadArr里添加元素,现在看一下何时(...UIScrollView *)scrollView{ scrollToToping = YES; return YES; } //停止滚动 - (void)scrollViewDidEndScrollingAnimation...而且在手指触碰到tableview时和 tableview停止滚动后就会执行loadContent方法,用来加载可见区域cell。...异步处理cell 在讲解如何异步处理cell之前,我们大致看一下这个cell都有哪些控件: ? 控件名称 了解到控件名称,位置之后,我们看一下作者是如何布局这些控件: ?

    1.2K10

    深入理解RunLoop及在开发中应用

    从关系图,我们可以知道 RunLoop 一次只能指定一种 Mode,且能够让不同组 Source/Timer/Observer 互不影响....解决NSTimer在UIScrollView滑动时停止工作问题 默认情况下,在滚动 tableView、UIScrollView 时候,NSTimer会停止工作,这是因为在滚动时,RunLoop...会进入另一个Mode 模式UITrackingRunLoopMode 下,在该模式下,定时器就会停止,当不在滚动 UITextView , 定时器会重新开始。...例如:UIScrollView+ NSTimer演示滚动时,定时器停止工作 - (void)viewDidLoad { [super viewDidLoad]; UIScrollView...监控应用卡顿 有时我们在滑动列表时,感觉很卡,特别是列表上有很多图片要显示时,如何解决卡顿呢,因为我们现在加载图片用SDWebImage,源码中已经处理了该问题,所以有时我们滑动列表时很顺畅。

    1.3K20

    TableView优化之快速滑动下忽略加载

    一方面是当时新浪微博客户端的确不行,另一方面VVebo简约风格和流畅体验俘获了一大批用户。所以今天我们就来探究一下他是如何做到TableView丝滑体验。...:(inout CGPoint *)targetContentOffset{ //取出滚动停止时展示第一个cellindexPath NSIndexPath *ip = [self indexPathForRowAtPoint...] firstObject]; NSInteger skipCount = 8; //如果两者之间差距很大则认为滑动速度很快,中间用户都不关心,直接把滚动停止展示cell加入到needLoadArr...如何获取到TableView快速回到顶部时间点?...要知道没有什么代理是直接反应滚动速度,这里作者很取巧用到了-scrollViewWillEndDragging:withVelocity:targetContentOffset:这个代理。

    1.7K33

    UITableView性能优化-中级篇

    进阶篇 最近遇到一个需求,对tableView有中级优化需求 要求 tableView 滚动时候,滚动到哪行,哪行图片才加载并显示,滚动过程中图片不加载显示; 页面跳转时候,取消当前页面的图片加载请求...下任务会暂停 停止滚动时候 - 进入`defaultMode` - 继续执行`trackingMode`下任务 - 例如这里loadImage */...滚动时候,进入trackingMode,导致defaultMode下任务会被暂停,停止滚动时候 ==> 进入defaultMode - 继续执行defaultMode下任务 - 例如这里defaultMode...,可以先下载图片,再对图片进行圆角处理,再设置到cell上显示 问:YYWebImage 如何设置圆角?...Demo源码 ---- 参考资料 iOS 保持界面流畅技巧 VVeboTableViewDemo YYKitDemo UIScrollView 实践经验

    1.6K20

    UIScrollerView当前显示3张图

    总效果.gif ①、首先像往常一样写一个基本UIScrollerView,会得到下图: _scrollerView = [[UIScrollView alloc] init]; _scrollerView.frame...Bug.gif 解决上述Bug方案就是利用UIScrollView两个代理方法;在前后循环过渡处,刚开始拖拽时就在Bug位置画上对应视图;即《 3 + 4 + 0 - 1 - 2 - 3 - 4...+ 0 + 1》,结束拖拽之后,再改变UIScrollViewcontentOffset,不带动画; //开始拖拽时执行 - (void)scrollViewWillBeginDragging:(UIScrollView...- 4 + 0 + 1 NSInteger index = scrollView.contentOffset.x/_currentPageSize.width; //是为了解决循环滚动连贯性问题...if (_isTimer) { [self statrScroll:_second]; } //是为了解决循环滚动连贯性问题 if (index == 0

    89470

    使用 UICollectionView 实现首页卡片轮播效果

    如何使用 UICollectionView 实现网易云首页卡片轮播效果。...思路分析 通过观察上面的图我们可以得出,这个网易云轮播控件有三个特点,分别是: 1.支持图片手动横向滚动2.支持图片自动滚动播放3.底部分页控件会高亮显示出当前图片是哪一张 好了,既然已经分析出来了它特点...JUST DO IT 想到滚动,大家首先想到肯定是用 UIScrollView + UIImageView 方式来实现,但是 UICollectionView 给我们提供了更好选择,因为它本身继承自...UIScrollView 然后又支持横向滚动,所以使用 UICollectionView 来实现横向滚动效果是最好不过。...: UIScrollView, willDecelerate decelerate: Bool) { self.setupTimer() 对以上俩点进行优化处理后,我们轮播控件就否就可以披挂上阵了呢

    2K20

    IOS5开发-UIScrollView添加单击事件方法

    UIScrollView在开发中是一个非常常用控件,UIScrollView具有水平、垂直滚动和缩放效果。但是尽然没有响应单击事件这个事件。而这个事件在日常交互中是非常需要。...比如当用于单击或轻触图片某个位置时,给于一些交互性提示。 下面我将用例子说明一下如何UIScrollView添加一个单击响应。...代码如下: 添加一个自定义UIScrollView,命名:UITouchScrollView UITouchScrollView.h代码如下 #import <Foundation/Foundation.h...但是这里注意一下 [self.nextResponder touchesEnded:touches withEvent:event];这句话意思是将UIScrollView单击事件往下传递,传递到它父...但是这样写法经过测试在IOS5.0以前版本可以。但IOS5以后(包括5)这不能往下传递,这里我也不知道为什么。希望有知道朋友说一下。

    1.9K70

    Swift 自定义布局实现 Cover Flow 效果

    滚动是分页滚动,而且每次停止位置都是与UICollectionView 中心点重合 需求已经明确了,那我们该如何去实现呢!...那该如何不通过设置 isPagingEnabled 来实现 Cell 分页滚动和居中显示呢!请接着往下看....UICollectionView 停止滚动时,返回一个新偏移点坐标,它有俩个参数,第一个参数 proposedContentOffset 指的是滚动将要停止偏移点坐标,第二个参数 velocity...指的是滚动速度;那既然我们能获取到当前滚动即将停止坐标,那我们就可以修改它,使它偏移点坐标能让 Cell 居中显示,在这里就不做更多阐述了,直接浏览下方代码吧!...: 将要停止点 /// - velocity: 滚动速度 /// - Returns: 滚动停止点 override func targetContentOffset(forProposedContentOffset

    1.7K20
    领券