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

iOS:当我们滚动任何视图时,计时器不会运行

在iOS开发中,当我们滚动任何视图时,计时器不会运行的原因是因为滚动视图的操作会导致主运行循环(Main Run Loop)切换到滚动模式,此时计时器会被暂停,直到滚动结束后才会继续运行。

为了解决这个问题,可以采取以下几种方法:

  1. 使用NSRunLoop的runMode:方法:在计时器的初始化代码中,将计时器添加到特定的运行模式(Mode)中,例如NSRunLoopCommonModes。这样计时器就会在滚动时继续运行。
  2. 使用CADisplayLink:CADisplayLink是一个与屏幕刷新率同步的计时器,它会在每次屏幕刷新时触发回调方法。通过将计时器的触发方法与CADisplayLink关联,可以确保计时器在滚动时仍然运行。
  3. 使用GCD的dispatch_source_t:使用GCD的定时器可以在指定的队列中执行代码,而不受滚动影响。可以使用dispatch_source_set_event_handler方法设置计时器的回调方法,并使用dispatch_resume和dispatch_suspend方法控制计时器的启动和暂停。

以上是解决计时器在滚动视图时不运行的几种常见方法。根据具体的需求和场景,选择适合的方法来解决该问题。

推荐的腾讯云相关产品:腾讯云移动应用分析(Mobile Analytics),该产品提供了全面的移动应用数据分析服务,可以帮助开发者深入了解用户行为、应用性能等信息,优化移动应用的用户体验和性能。产品介绍链接地址:https://cloud.tencent.com/product/ma

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

相关·内容

IOS开发基础系列】UIScrollView专题

滚动视图必须知道内容视图的大小,以便于知道什么时候停止;一般而言,滚动出内容的边界,它就返回了。         ...假如定时器行动,没有任何的大的位置改变,滚动视图就发送一个跟踪事件给触摸的子视图。如果在定时器消失前,用户拖动他们的手指足够的远,滚动视图取消子视图任何跟踪事件,滚动它自己。...一个滚动视图也可以控制一个视图的缩放和平铺。当用户做捏合手势滚动视图调整偏移量和视图的比例。手势结束的时候,管理视图内容显示的对象,就应该恰当的升级子视图的显示。...手势在处理的过程中,滚动视图不能够给子视图,发送任何跟踪的调用。...我们设置的这个cancancelContentTouches属性为NO,只是让UIScrollView不能发送cancel事件给子视图

38630

RunLoop 总结:RunLoop的应用场景(二)让Timer正常运转

这一篇就讲述一下RunLoop如何保证NSTimer在视图滑动,依然能正常运转。 参考资料 好的书籍都是值得反复看的,那好的文章,好的资料也值得我们反复看。...目前最新的是CF-1153.18.tar.gz) RunLoop官方文档(学习iOS任何技术,官方文档都是入门或深入的极好手册;我们也可以在Xcode--->Help--->Docementation...可是当我们滑动tableView的时候,顶部的scollView并不会切换图片,这可怎么办呢?...因为RunLoop是独立的两个,相互不会影响,所以在子线程添加timer,滑动视图,timer能正常运行。...总结 1、如果是在主线程中运行timer,想要timer在某界面有视图滚动,依然能正常运转,那么将timer添加到RunLoop中,就需要设置mode 为NSRunLoopCommonModes。

62851

Human Interface Guidelines —— 工具栏(Toolbars)

Toolbar Toolbar出现在app屏幕的底部,并包含用于执行与当前视图或其中的内容相关操作的按钮。  Toolbar是半透明的,可能具有背景色,并且人们不太可能需要它们,它们通常隐藏。...例如,在Safari中,您开始滚动页面,工具栏会隐藏,因为您可能正在阅读。 您可以通过点击屏幕底部再次显示。 键盘出现在屏幕上,toolbar也会隐藏。...·考虑图标或文字标题的按钮是否适合app 您需要三个以上的toolbar按钮,图标是好的选择。当你有三个或更少的按钮,文字有时会更清晰。例如,在日历中,使用文本是因为图标会令人困惑。...·给文本标题按钮足够的空间 如果您的工具栏包含多个按钮,则这些按钮的文本可能会一起运行,从而使按钮无法区分。通过在按钮之间插入固定空间来添加分隔。 ?...Tab bar可让用户在app的不同部分之间快速切换,例如,时钟应用程序中的闹钟,秒表和计时器tab。  Toolbar和tab bar永远不会出现在同一个视图中。

1.2K100

OpenGL ES编程指南(三)

如果您使用GLKit view和view controller,并且只在绘图方法中提交OpenGL ES命令,那么您的应用移动到背景,您的应用会自动正确运行。...您的应用程序位于后台,它对用户不可见,并且可能不会使用OpenGL ES呈现任何新内容。这意味着您的应用程序的帧缓冲区所消耗的内存已分配,但无用。...如果您使用GLKit视图视图控制器,则您的应用移动到后台,GLKViewController类会自动处理其关联视图的帧缓冲区。如果您为其他用途手动创建帧缓冲区,则应该在应用移动到背景将其丢弃。...支持具有高分辨率显示器的设备,您应该相应地调整应用程序的型号和纹理资源。 在高分辨率设备上运行时,您可能需要选择更详细的模型和纹理以呈现更好的图像。...在外部显示器上绘图的步骤与在主屏幕上运行的步骤几乎完全相同。 按照多显示器编程指南for iOS中的步骤在外部显示器上创建一个窗口。 为您的渲染策略添加适当的视图视图控制器对象。

1.8K10

iOS 中的定时器

我们平时开发,或多或少都会使用到定时器,今天我们来聊聊 iOS 中的定时器。...这样就涉及到一个比较典型的面试题:Timer 在滚动视图滚动不进行响应。答案已经在上面了。...线程在进行大量计算,这期间有可能会错过很多次 Timer 的循环周期,但是 Timer 并不会将前面错过的执行次数在后面都执行一遍,而是继续执行后面的循环,也就是在一个循环周期内只会执行一次循环。...; Timer 创建完后,建议调用 activate() 方法开始运行。...,挂起一次,恢复一次,如果 Timer 开始运行后,在没有 suspend() 的时候,直接调用resume(),会导致 APP 崩溃; Timer 处于 suspend 的状态,如果销毁 Timer

1.2K20

Flutter vs React Native vs Native:深度性能比较

我们还使用Android上的RecyclerView.SmoothScroller来自动化滚动速度。在iOS和React Native上,我们使用了带有计时器的方法,并以编程方式滚动到位置。...在Flutter上,我们使用ScrollController平滑滚动列表。在每种情况下,我们在列表视图中都有1000个项目,并且滚动时间相同以到达最后一个列表元素。...iOS Native积极使用GPU,Flutter积极使用CPU。Flutter中的协调会增加CPU的负载。...用例2 —繁重的动画测试 如今,大多数在Android和iOS运行的手机都具有强大的硬件。在大多数情况下,使用常规的商业应用程序时,不会发现fps下降。因此,我们决定对重型动画进行一些测试。...iOS iOS和React Native在此测试中的结果几乎与Lottie for React Native使用本地方法相同。 Flare和Flutter不会令人惊讶。

3.5K20

用AutoLayout实现分页滚动

,再加上线性布局的特性,所以页视图不需要设置任何附加的约束。...containerView.wrapContentWidth = YES; //设置布局视图的宽度由子视图包裹,垂直流式布局的这个属性设置为YES,并和pagedCount搭配使用会产生分页从左到右滚动的效果...下面是程序运行的效果: ? 分页图标效果图 横竖屏切换 对于带有分页功能的滚动视图来说,需要支持横竖屏就有可能会出现横竖屏切换界面停留在两个页面中间而不是按页进行滚动的效果。...其原因是无论是分页滚动还是不分页滚动,在滚动都是通过调整滚动视图的contentOffset来实现的。...而滚动视图进行横竖屏切换不会调整对应的contentOffset值,这样就导致了在屏幕方向切换滚动位置出现异常。

1.9K40

iOS 封装跑马灯和轮播效果

,可以设置时间间隔、渐进速率、是否循环、分页宽度和间隔,还支持高度自定义分页视图的控件。...一、实现方法 ①、 首先用UICollectionView和计时器实现一个基本的水平滚动效果,如下图,这个太简单就不在此详述。...iOS UICollectionView ②、对比上面的效果图,我们还需要解决分页的宽度和循环滚动的问题。...自定义分页宽度:默认的分页宽度是UICollectionView的宽度,所以分页宽度的不等于UICollectionView的宽度或分页间隔不等于0会出现错误,这时就需要我们通过自定义UICollectionViewFlowLayout.../** 返回值决定了collectionView停止滚动的偏移量 手指松开后执行 * proposedContentOffset:原本情况下,collectionView停止滚动最终的偏移量 *

4K40

【Hybrid开发高级系列】ReactNative(七) —— RN组件专题

3.4.1 Props alwaysBounceHorizontal 布尔型         为真滚动视图到达内容底部,水平反弹,即使该内容小于滚动视图。...alwaysBounceVertical 布尔型         为真滚动视图到达内容底部,垂直反弹,即使该内容小于滚动视图。...automaticallyAdjustContentInsets 布尔型 bounces 布尔型         为真滚动视图到达内容底部,反弹,如果内容比滚动视图是大,那么滚动视图沿着轴滚动方向反...centerContent bool布尔型         为真内容小于滚动视图边界滚动视图自动的集中内容;内容大于滚动视图,该属性没有任何影 响。默认值是false。...keyboardShouldPersistTaps布尔型         为假键盘向上摒弃键盘,轻击外部关注文本输入。为真滚动视图不会抓取轻击,键盘不会自动 摒弃。

44440

最新iOS设计规范三|3大界面要素:栏(Bars)

iOS运行于iPhone、iPad和iPod touch设备上、最常用的移动操作系统之一。作为互联网应用的开发者、产品经理、体验设计师,都应当理解并熟悉平台的设计规范。...这有利于提高我们的工作效率,保证用户良好的体验。 本文是iOS设计规范系列第3篇,介绍3大界面要素(栏、视图、控件)中的栏(Bars)。首先让我们了解一下iOS的3大界面要素。...选择一个即可直接进入,而无需输入任何搜索词。您在搜索字段中键入时,“股票”会显示结果列表。随时点按一个,而无需再输入任何字符。 可以将搜索栏下添加范围栏,缩小搜索范围。 ?...人们导航到您应用中的其他区域,请不要隐藏标签栏。标签栏可为您的应用启用全局导航,因此它在任何地方都应保持可见。模态视图例外。...例如:在Safari中,当你开始滚动页面,工具栏会自动隐藏,因为你可能正在阅读。你还可以点击屏幕底部让它再次出现。弹出键盘,工具栏也会被隐藏。 ?

9.8K10

iOS 9人机界面指南(四):UI元素(下)- 腾讯ISUX

计时器。倒计时器模式展示了小时和分钟值。你可以精确地设定总共的倒计时间,倒计时的最大值为23小59分钟。...视图数量超过页面宽度可承载的氛围,点的大小和间距并不会因此变小(如果需要显示的点超过一定数量,系统会把它截断) 默认情况下不支持视图之间导航;你必须实现视图视图之间的导航并适当地更新页面控件状态...告知用户有多少打开的视图的需求比帮助用户选择特定的视图更重要,使用页面控件。...不要让他们在使用选择器还要进入其它的视图。 如果你需要展示的备选项数量很多,考虑使用表格视图(Table View)而不是选择器。因为表格视图的高度较大,内容滚动起来会更快。...文本框里没有任何其它提示文字,会展示占位符文本(placeholder text),如名字、地址等。 根据输入内容的类型来指定不同的键盘类型。

13.2K30

Ask Apple 2022 与 SwiftUI 有关的问答(下)

因此,如果你正在创建一个视图来显示可滚动的内容,并可能进行选择操作,那么在 iOS 和 macOS 上使用 List 将有最好的体验。...鉴于动态文本大小在应用程序运行时可能会发生变化,衡量给定字体的文本大小的最佳方法是什么?A:你好!我们新的布局协议支持这个功能。...创建从底部开始的滚动视图Q:我如何实现一个在底部对齐的滚动视图,在 macOS 上会不会有糟糕的性能?...这意味着我们不能使用 LazyVStack,或任何其他将选择与详细视图绑定的自定义视图。有扩展这个功能的计划吗?A:在 iOS 16.1 中,你可以在侧边栏里放一个。...A:解决办法:保留 TextField ,但它不能被编辑,有条件地设置 disabled(true),它可以编辑使用 disabled(false) 。

14.7K30

最新iOS设计规范五|3大界面要素:控件(Controls)

iOS运行于iPhone、iPad和iPod touch设备上、最常用的移动操作系统之一。作为互联网应用的开发者、产品经理、体验设计师,都应当理解并熟悉平台的设计规范。...这有利于提高我们的工作效率,保证用户良好的体验。 本文是iOS设计规范系列第5篇,介绍3大界面要素(栏、视图、控件)中的控件(Controls)。首先让我们回顾一下iOS的3大界面要素。...这样即能让页面控件是可见,又不会遮挡其他内容。 七、选择器(Pickers) 选择器可以显示一个或多个可滚动的不同值列表,供人们选择。...活动加载指示(Activity Indicators) 就是通常我们讲的转菊花。执行无法量化的任务(例如加载或同步复杂数据),加载器会旋转。任务完成后它会消失。活动加载器是不是可交互元素。 ?...如果有帮助,请在用户等待任务完成为其提供有用的提示信息。可以在加载器上方添加标签以提供额外的上下文信息。避免使用模糊的术语,如加载或验证,因为它们通常不会增加任何价值。

8.5K30

掌握 SwiftUI 的 task 修饰器

return false } } } } 图片 task 的生命周期 上文中的两段演示代码,即使算上网络延迟, task 闭包的运行持续时间也不会太长...图片 我们的本意是通过按钮来开启和关闭计时器的显示以控制任务的生命周期( 关闭结束任务 ),但在点击 Hide Timer 按钮后,app 出现了无法响应且控制台仍在持续输出( 不按照原定的间隔时间...满足了需要停止由 task 修饰器创建的异步任务条件,SwiftUI 会给该任务发送任务取消信号,任务必须自行响应该信号并停止作业。...那些没有特别声明需运行在某特定 actor 上的闭包,它们可以运行于任意地点( 任何的线程之中 )。....... } } 我们可以通过将异步方法移到视图类型之外来解决这个问题。

3.5K60

小程序bug

记录下本人在写小程序时遇到的一系列难题与bug 菜单隐藏消失的动画效果(主要用了animation、transformX控制left的值),在设置wx-charts图表在菜单显示隐藏,最后发现在安卓上正常运行...可手动删除一些无用数据再setData 3. wx-canvas线状图中多条线展示,点击显示tooltip后苹果手机会出现无法滚动的现象。...还有就是cover-view它会有默认设置的样式:white-space: nowrap; line-height: 1.2; display: block;所以你会看到在cover-view里边写的文字不会换行...小程序没有监听页面滚动停止的事件,可用计时器监听 onPageScroll: function(e) { clearTimeout(this.timeoutId); this.isNotScroll...= false; // 设计时器以监听页面停止滚动 this.timeoutId = setTimeout( function() { this.isNotScroll

84820

优化在 SwiftUI List 中显示大数据集的响应效率

本文的范例需运行iOS 15 及以上系统,技术特性也以 SwiftUI 3.0 为基础。...也就是显示主界面菜单,列表视图已经完成了实例的创建(可以通过在 ListEachRowHasID 的构造函数中添加打印命令得以证明),因此也不应是实例化列表视图导致的延迟。...仅通过 ForEach 来指定显示标识,List 会对这些视图的显示进行优化,仅在需要显示才会对其进行实例化。...新的问题 细心的朋友应该可以注意到,运行解决方案一的代码后,在第一次点击 bottom 按钮,大概率会出现延迟情况(并不会立即开始滚动)。...对于拥有复杂结构子视图(尺寸不一致、图文混排)的 List 来说,在数据量大的情况下,任何的大跨度滚动( 例如直接滚动到列表底部 )都会给 List 造成巨大的布局压力,有不小的滚动失败的概率。

9.1K20

用这些 iOS 技巧让你的 APP 性能更佳

通过将屏幕上不再可见的 tableViewCell 放入队列中进行复用,并且新 tableViewCell即将在屏幕上可见(例如,当用户向下滚动,下面的后续tableViewCell),表视图将从此队列中检索...使用启动页进行加载或品牌化可能会减慢首次使用的时间,并使用户感觉应用程序运行缓慢。 当你新建 iOS 项目,Xcode 会创建一个空白的 LaunchScreen.storyboard 供你使用。...(查看大图) 另外需要注意的是, UIActivityIndicatorView放置在启动页上不会生成动画,因为 iOS 只会将启动页 storyboard 生成静态图像并将其展示给用户。...用户退出应用程序时 iOS 截取的应用程序截图(查看大图) iOS 使用这些屏幕截图来给人一种假象,即应用程序仍在运行或仍在显示此特定视图,而应用程序可能已被后台终止或重新启动,但此时仍显示相同的屏幕截图...绘图系统在 label 区域附近的进行绘制,它将询问 label 后面的图层并进行一些计算。 优化应用性能的方法是尽可能减少用红色突出显示的视图数量。

3.2K30
领券