Ios 始终跟踪UIScrollView内容偏移量
我正在使用计时器打印Ios 始终跟踪UIScrollView内容偏移量,ios,swift,uiscrollview,contentoffset,Ios,Swift,Uiscrollview,Contentoffset,我正在使用计时器打印UIScrollView的contentOffset.y,以便始终跟踪它 但问题是UIScrollView仅在减速后才更新其contentOffset值 我想知道计时器的contentOffset.y每毫秒的值,我该怎么做?如果我根本无法使用UIScrollView的contentOffset,是否有其他方法跟踪与滚动视图的contentOffset.y类似的值 我用的是斯威夫特。谢谢。您可以观察值的任何更改,而不是通过计时器轮询来跟踪更改UIScrollView有一个为滚动
UIScrollView的contentOffset.y
,以便始终跟踪它
但问题是UIScrollView
仅在减速后才更新其contentOffset
值
我想知道计时器的contentOffset.y
每毫秒的值,我该怎么做?如果我根本无法使用UIScrollView的contentOffset
,是否有其他方法跟踪与滚动视图的contentOffset.y
类似的值
我用的是斯威夫特。谢谢。您可以观察值的任何更改,而不是通过计时器轮询来跟踪更改UIScrollView
有一个为滚动事件调用的delegate
属性(请参见UIScrollViewDelegate
),并且contentOffset
符合KVO
或者,您可以将UIScrollView
子类化,并尝试重写setter(对于contentOffset
或bounds
,其中origin
是偏移量,我不确定类内部调用的是哪一个,如果有,则使用委托
是首选解决方案).您可以观察值的任何更改,而不是通过计时器轮询来跟踪更改UIScrollView
有一个为滚动事件调用的delegate
属性(请参见UIScrollViewDelegate
),并且contentOffset
符合KVO
或者,您可以将UIScrollView
子类化,并尝试重写setter(对于contentOffset
或bounds
,其中origin
是偏移量,我不确定类内部调用的是哪一个,如果有,则使用委托
是首选解决方案).你能发布你到目前为止尝试过的任何东西的代码吗?让timer=timer.scheduledTimer(timeInterval:0.01,target:self,selector:#selector(self.timTick),userInfo:nil,repeats:true)//声明时间函数timTick(){let scrOffset=scrollView.contentOffset.y print(scrOffset)}//每0.01秒打印一次
@poojasrivastavac是否可以发布您迄今为止尝试过的任何东西的代码?让timer=timer.scheduledTimer(timeInterval:0.01,target:self,selector:#selector(self.timTick),userInfo:nil,repeats:true)//声明时间函数timTick(){让scrOffset=scrollView.contentOffset.y打印(scrOffset)}//每0.01秒打印一次
@PoojaSrivastavaThank谢谢你的回答。但是UIScrollView委托方法只有WillBegin..
和DidEnd…
方法,它们仅在我完成或开始拖动、滚动或滚动视图本身完成或开始减速时调用。我需要知道每次我不知道如何覆盖你提到的设置器@Arkku@thuraoo每当偏移量发生变化时,就会在滚动过程中调用scrollViewDidScroll:
,而不仅仅是开始/结束(只需尝试一下)在该方法中,您可以检查滚动视图的isDraging
,isTracking
和/或isDecellerating
属性。如果您在这些事件中需要一些特殊处理,您还可以覆盖willBegin
和didEnd
以进行拖动和/或减速。@Thurao关于如何覆盖设置器,正如您将重写任何方法一样(记住调用super
实现)。但这不太可能是必要的,我已经做了很多事情,需要准确跟踪滚动视图的移动,而且代理的scrollViewDidScroll:
几乎总是足够的。@Thurao在任何情况下,计时器都是解决问题的可怕方法。你大部分时间都会不必要地调用它,你的应用程序将以每秒100次的速度唤醒无意义计时器,最终响应速度仍将比跟踪实际更改更差。现在我的问题解决了。正如方法所说的scrollViewDidScroll
我认为它只有在减速后才会调用。现在我尝试了它,它工作正常。非常感谢您的回答和通信nts。谢谢您的回答。但UIScrollView委托方法仅为Willbeng..
和DiEnd…
方法,仅在我完成或开始拖动、滚动或滚动视图本身完成或开始减速时调用。我需要知道每次手指触摸手机时的值(或)滚动视图是否完成减速。我不知道如何覆盖您提到的设置器@Arkku@thuraoo每当偏移量发生变化时,就会在滚动过程中调用scrollViewDidScroll:
,而不仅仅是开始/结束(只需尝试一下)在该方法中,您可以检查滚动视图的isDraging
,isTracking
和/或isDecellerating
属性。如果您在这些事件中需要一些特殊处理,您还可以覆盖willBegin
和didEnd
以进行拖动和/或减速。@Thurao关于如何覆盖设置器,正如您将重写任何方法一样(记住调用super
实现)。但这不太可能是必要的,我已经做了很多事情,需要准确跟踪滚动视图的移动,而且代理的scrollViewDidScroll:
几乎总是足够的。@Thurao在任何情况下,计时器都是解决问题的可怕方法。你大部分时间都会不必要地调用它,你的应用程序将以每秒100次的速度唤醒无意义计时器,最终响应性仍将比跟踪实际更改更差。现在我的问题解决了。正如方法所说的那样,我认为它只会在de后调用