Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 始终跟踪UIScrollView内容偏移量_Ios_Swift_Uiscrollview_Contentoffset - Fatal编程技术网

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后调用