2016-09-29 78 views
0

我正在使用计时器并打印UIScrollViewcontentOffset.y以跟踪它始终跟踪UIScrollView contentOffset始终

但问题是UIScrollView只有在减速后才更新其contentOffset值。

我想知道在每012毫秒的定时器contentOffset.y值,我该怎么做?如果我根本不能使用UIScrollViewcontentOffset,那么有没有其他方法可以跟踪scrollView的类似值contentOffset.y

我正在使用swift。谢谢。

+0

你可以发布任何你尝试过的代码吗? –

+0

'让计时器= Timer.scheduledTimer(一个时间间隔:0.01,目标:自,选择器:#selector(self.timTick),用户信息:无,重复:真)//声明时间 FUNC timTick() { 设scrOffset = scrollView.contentOffset.y print(scrOffset) } //每0.01秒打印一次@ @PoojaSrivastava –

回答

2

除了通过使用定时器轮询来跟踪更改,您可以观察对该值所做的任何更改。 UIScrollView有一个调用滚动事件的delegate属性(请参阅UIScrollViewDelegate),并且contentOffset与KVO兼容。

或者你可以继承UIScrollView,并尝试重写制定者(无论是contentOffsetbounds其中origin是补偿,我不知道如果任,类内部调用哪一个, - 使用delegate是首选的解决方案)。

+0

谢谢您的回答。但是UIScrollView委托方法只有'WillBegin..'和'DidEnd ...'方法,这些方法只在我完成或开始时调用**拖动,滚动或scrollView本身**完成或开始**减速。每次我都需要知道数值**我的手指是否触摸手机(或)滚动查看是否完成减速。我不知道如何覆盖你提到的setter。 @Arkku –

+0

@thuraoo每当偏移改变时,滚动期间将调用'scrollViewDidScroll:',而不仅仅是开始/结束。 (只需尝试一下。)在该方法中,您可以检查滚动视图的“isDragging”,“isTracking”和/或“isDecelerating”属性。如果您需要对这些事件进行特殊处理,您还可以覆盖'willBegin'和'didEnd'进行拖拽和/或减速。 – Arkku

+0

@thuraoo至于如何覆盖setter,你可以重写任何方法(记得调用'super'实现)。但它不太必要,我做了很多事情,需要精确地跟踪滚动视图的运动,并且代表的“scrollViewDidScroll:”几乎总是足够的。 – Arkku