【问题标题】:Track UIScrollView contentOffset all the time一直跟踪 UIScrollView contentOffset
【发布时间】:2016-09-29 10:32:30
【问题描述】:

我正在使用计时器并打印UIScrollViewcontentOffset.y一直跟踪它

但问题是UIScrollView 仅在减速后更新其contentOffset 值。

我想知道计时器每毫秒contentOffset.y值,我该怎么做?如果我根本无法使用UIScrollViewcontentOffset,有没有其他方法可以跟踪滚动视图的contentOffset.y 的类似值?

我正在使用 swift。谢谢。

【问题讨论】:

  • 你能把你迄今为止尝试过的代码贴出来吗?
  • let timer = Timer.scheduledTimer(timeInterval: 0.01, target: self, selector: #selector(self.timTick), userInfo: nil, repeats: true) //declare the time func timTick() { let scrOffset = scrollView.contentOffset.y print(scrOffset) } //print every 0.01 second@PoojaSrivastava

标签: ios swift uiscrollview contentoffset


【解决方案1】:

您可以观察值的任何更改,而不是通过使用计时器轮询来跟踪更改。 UIScrollView 有一个 delegate 属性,可以为滚动事件调用(请参阅UIScrollViewDelegate),contentOffset 符合 KVO。

或者您可以继承 UIScrollView 并尝试覆盖设置器(contentOffsetbounds 其中origin 是偏移量,我不确定哪个类在内部调用 -使用delegate 是首选解决方案)。

【讨论】:

  • 感谢您的回答。但是 UIScrollView 委托方法只有 WillBegin..DidEnd... 方法,它们仅在我完成或开始拖动、滚动或滚动视图本身完成或开始减速时调用。我需要知道值每次我的手指是否正在触摸手机(或)滚动视图是否完成减速。我不知道如何覆盖您提到的设置器。 @Arkku
  • @thuraoo scrollViewDidScroll: 在滚动期间只要偏移量发生变化就会被调用,而不仅仅是开始/结束。 (试试吧。)在该方法中,您可以检查滚动视图的isDraggingisTracking 和/或isDecelerating 属性。如果您需要对这些事件进行特殊处理,还可以覆盖 willBegindidEnd 以进行拖动和/或减速。
  • @thuraoo 至于如何覆盖设置器,就像你会覆盖任何方法一样(记得调用super 实现)。但这不太可能是必要的,我已经做了很多需要准确跟踪滚动视图移动的事情,而委托的scrollViewDidScroll: 几乎总是足够的。
  • @thuraoo 在任何情况下,计时器都是解决问题的可怕解决方案。大多数时候你会不必要地调用它,你的应用会为无意义的计时器每秒唤醒 100 次,最终响应能力仍然会比跟踪实际变化更差。
  • 现在我的问题解决了。正如方法所说scrollViewDidScroll 我认为它只会在减速后调用。现在我尝试了它并且它有效。 非常感谢您的回答和cmets。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
相关资源
最近更新 更多